学习日志————关于MySQL中文乱码
来源:互联网 发布:java 获取今天星期几 编辑:程序博客网 时间:2024/06/07 14:19
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+
8 rows in set (0.06 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.02 sec)
上面列出的值就是系统的默认值。latin1默认校对规则是latin1_swedish_ci,默认是latin1的瑞典语排序方式.
为什么呢默认会是latin1_swedish_ci呢,追溯一下mysql历史很容易发现(大家可以百度一下)
相信如果mysql是中国开发的,那么汉语也是默认编码了
当然也可以自己需要修改mysql的默认字符集
在mysql配置文档my.ini,找到如下两句:
[mysql]
default-character-set=latin1
和
# created and no character set is defined
default-character-set=latin1
修改后面的值就可以。
这里不建议改,仍保留默认值
也就是说启动 mysql时,如果没指定指定一个默认的的字符集,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集; 当创建一个新的数据库时,
除非明确指定,这个数据库的字符集被缺省设定为 character_set_server; 当选定了一个数据库时,
character_set_database 被设定为这个数据库默认的字符集; 在这个数据库里创建一张表时,
表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集。
这样问题就随之而来了,我的数据库原来是latin1编码。因为在建库建表的时候,没有用明确的语言说明编码方案,如果访问数据库时没指定其的字符集是utf8。自然是乱码,使用SQL语句:
alter database da_name default character set 'charset'.
或者在建表的时候指定也可以:
CREATE TABLE tablename(
......
)DEFAULT CHARSET=utf8;
可以改编码.
在网站web.config里,已经配置了:
<globalization requestEncoding="utf-8" resp fileEncoding="utf-8"/>
所以编码自然是UTF8了
不过就算这样,问题还没有解决,郁闷,想来想去不明白,以为是MySql.Data.dll有BUG,就百度Google到处找答案,没有任何结果.
心恢意冷的时候,想想是不是在连接的时候,使用MySql.Dat连接时没有告诉Mysql用的是什么编码?
朝着这个方向想下去,解决了...
连接字符串时,应该加上编码:
<add key="MySqlConnectionString" value="Server=X.X.X.X;user id=XXXX;password=XX;database=DATABASENAME;charset=utf8"/>
希望遇到同样问题的时候,能给大家帮助
查看系统的字符集和排序方式的设定可以通过下面的两条命令:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:MySQLMySQL Server 5.0sharecharsets |
+--------------------------+-------------------------------------------+
8 rows in set (0.06 sec)
mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.02 sec)
上面列出的值就是系统的默认值。latin1默认校对规则是latin1_swedish_ci,默认是latin1的瑞典语排序方式.
为什么呢默认会是latin1_swedish_ci呢,追溯一下mysql历史很容易发现(大家可以百度一下)
相信如果mysql是中国开发的,那么汉语也是默认编码了
当然也可以自己需要修改mysql的默认字符集
在mysql配置文档my.ini,找到如下两句:
[mysql]
default-character-set=latin1
和
# created and no character set is defined
default-character-set=latin1
修改后面的值就可以。
这里不建议改,仍保留默认值
也就是说启动 mysql时,如果没指定指定一个默认的的字符集,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集; 当创建一个新的数据库时,
除非明确指定,这个数据库的字符集被缺省设定为 character_set_server; 当选定了一个数据库时,
character_set_database 被设定为这个数据库默认的字符集; 在这个数据库里创建一张表时,
表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集。
这样问题就随之而来了,我的数据库原来是latin1编码。因为在建库建表的时候,没有用明确的语言说明编码方案,如果访问数据库时没指定其的字符集是utf8。自然是乱码,使用SQL语句:
alter database da_name default character set 'charset'.
或者在建表的时候指定也可以:
CREATE TABLE tablename(
......
)DEFAULT CHARSET=utf8;
可以改编码.
在网站web.config里,已经配置了:
<globalization requestEncoding="utf-8" resp fileEncoding="utf-8"/>
所以编码自然是UTF8了
不过就算这样,问题还没有解决,郁闷,想来想去不明白,以为是MySql.Data.dll有BUG,就百度Google到处找答案,没有任何结果.
心恢意冷的时候,想想是不是在连接的时候,使用MySql.Dat连接时没有告诉Mysql用的是什么编码?
朝着这个方向想下去,解决了...
连接字符串时,应该加上编码:
<add key="MySqlConnectionString" value="Server=X.X.X.X;user id=XXXX;password=XX;database=DATABASENAME;charset=utf8"/>
希望遇到同样问题的时候,能给大家帮助
0 0
- 学习日志————关于MySQL中文乱码
- JSP学习笔记之二——关于中文乱码
- Python中文乱码问题——MySQL
- Java学习(二)——mysql插入中文数据、中文数据乱码的解决方法
- Mysql学习总结(34)——Mysql 彻底解决中文乱码的问题
- 关于mysql中文乱码
- 初学JSP笔记———关于中文乱码
- mysql中文乱码问题——命令行设置编码格式
- java web项目——MySQL中文乱码问题解决
- MySQL菜鸟学习日志——0001
- Python学习笔记——解决中文输出时乱码
- weka学习—解决导入weka中文乱码
- Servlet学习笔记—request获得参数中文乱码问题解决
- JBPM——中文乱码
- JBPM——中文乱码
- J2EE—解决中文乱码
- 关于MYSQL数据库中文显示乱码问题
- 关于mysql中中文乱码的问题
- 主角受伤处理:动画Animator & 血量减少的显示
- mybatis的CRUD(注解版)
- TextView 跑马灯
- 从数据库读取日期型数据的错误记录:argument type mismatch
- sed命令详解
- 学习日志————关于MySQL中文乱码
- 主角受伤处理:屏幕上显示血红效果
- VS2013 全局搜索的结果不显示结果所在文件名和所在行
- sift算法—图像的高斯金字塔的生成(1)
- C++作业7
- (4.2.28)项目中使用的gif开源组件----android-gif-drawable
- 自定义组合控件
- CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙,配置apache
- 学习日志————MySQL练习