mysql 创建 数据库时指定编码很重要,很多开发者都使用了默认编码,乱码问题可是防不胜防。制定数据库的编码可以很大程度上避免倒入导出带来的乱码问题。
网页数据一般采用UTF8编码,而数据库默认为latin 。我们可以通过修改数据库默认编码方式为UTF8来减少数据库创建时的设置,也能最大限度的避免因粗心造成的乱码问题。
我们遵循的标准是,数据库,表,字段和页面或文本的编码要统一起来
我们可以通过命令查看数据库当前编码:
mysql>SHOW VARIABLES LIKE 'character%'
发现很多对应的都是 latin1,我们的目标就是在下次使用此命令时latin1能被UTF8取代。
第一阶段:
mysql设置编码命令
[sql] view plain copy
SET character_set_client = utf8
SET character_set_connection = utf8
SET character_set_database = utf8
SET character_set_results = utf8
SET character_set_server = utf8
然后 mysql>SHOW VARIABLES LIKE 'character%' 你可以看到全变为 utf8 。但是,这只是一种假象
此种方式只在当前状态下有效,当重启数据库服务后失效。
所以如果想要不出现乱码只有修改my.ini文件,
从my.ini下手(标签下没有的添加,有的修改)
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
以上3个section都要加default-character-set=utf8,平时我们可能只加了mysqld一项。
然后重启mysql,执行
mysql>SHOW VARIABLES LIKE 'character%'
确保所有的Value项都是utf8即可。
但是可恶的事情又来了,
|character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8
注意 该配置| character_set_server | latin1 无法设置成UTF8 交互时候仍然会出现乱码。
第二阶段:找到下面这东东
X:\%path%\MySQL\MySQL Server 5.0\bin\MySQLInstanceConfig.exe
重新启动设置,将默认编码设置为utf8.这样就能达到我们所要的效果了。
mysql>SHOW VARIABLES LIKE 'character%'
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set
MySQL中,数据库的编码是一个相当重要的问题,有时候我们需要查看一下当前数据库的编码,甚至需要修改一下数据库编码。查看当前数据库编码的SQL语句为:
mysql>use xxx
Database changed
mysql>show variables like 'character_set_database'
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | latin1 |
+------------------------+--------+
1 row in set (0.00 sec)
上面,我们先切换到xxx数据库下面来,然后使用SQL语句:show variables like 'character_set_database'来查看了xxx数据库的编码。查询得到的结果是latin1编码。
下面,我们来修改xxx数据库的编码,把它修改为gb2312。
mysql>alter database xxx CHARACTER SET gb2312
Query OK, 1 row affected (0.00 sec)
mysql>show variables like 'character_set_database'
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | gb2312 |
+------------------------+--------+
1 row in set (0.00 sec)
这里同样做了两件事情:
1、使用SQL语句:alter database xxx CHARACTER SET gb2312把xxx数据库的编码设置为了gb2312.
2、再次使用show variables like 'character_set_database'来确认一下当前xxx是什么编码。经过确认,数据库编码已经修改为gb2312了。
以下内容为固定写法,可以修改数据库编码格式。第一步:通过系统管理员权限登录数据库。
sql>conn / as sysdba
第二步:关闭数据库和实例连接。
sql>shutdown immediate
database closed.
database dismounted.
oracle instance shut down.
第三步:启动数据库实例连接。
sql>startup mount
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
第四步:限制其它用户连接数据库使用资源。
sql>alter system enable restricted session
system altered.
第五步:设置作业进行为0个。
sql>alter system set job_queue_processes=0
system altered.
第六步:设置启动时间管理器的数量为0
sql>alter system set aq_tm_processes=0
system altered.
第七步:打开数据库连接
sql>alter database open
database altered.
第八步:修改需要的编码格式
sql>alter database character set internal_use GBK
第九步:关闭连接。
sql>shutdown immediate
第十步:启动oracle进程。
sql>startup
备注:常用的有:UTF-8,GBK 。
UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)