mysql中文乱码解决方法

时间:2023-02-10 11:21:32

latin1(1和l的区别,l要么没有缺缺,要么缺缺是向左的直的; 1向左的缺缺是弯曲的,应该是可以看得出来的)是8位的字符集,表示英文和西欧字母.

瑞士: Switzerland [swits2land], 瑞士人(的): Swiss.
Swedish: 瑞典的.

collate: collation: 整理,校对; 排序规则

MySQL默认的校对规则是 :latin_swedish_ci, 为什么是瑞典的呢? 因为他的创始人 Monty 就是瑞典的。

mysql中查询等sql语句中的 通配符是 %. 在查询语句中可以使用 like 'latin1%'

mysql中show...的内容很多, 可以查看很多内容:
show character set;
show collation like 'latin1%';

character: 字符集, collation: 整理规则, 字符集中字符的"比较规则","排序规则"

latin类字符集,相当于latin语系,包括四种latin1, latin2, 5, 7四种字符集, 相当于东方语系包括中文, 日文, 韩文等字符集

字符集并不完全等同于整理规则, 仔细想想差别还是挺明显的. 而且同一个字符集可能有多个排序规则,如latin1 -> latin1_swedish_ci, latin_spanish_ci,...
因为一般很少指定collation,所以要指定一个 default collation.

ci: case insensitive 大小写不敏感
cs: case sensitive 大小写敏感

从 整理规则 可以知道 排序和比较的情况: 如utf8_general_ci: 表示字符集是utf8, 比较规则是general, ci是大小写不敏感,所以注册用户名和邮件地址时要使用, 如

A和a, mysql认为是相同的. 而utf8_bin: 表示字符集是utf8, 而比较排序时,按二进制存储和排序比较,则a和A是不同的. 也可以知道, 并不是所有的"整理"规则 都要

使用 ci.

show create table tablename; mysql显示 "数据表" 的 默认的字符集是latin1(注意不是utf8): ...default charset=latin1
show full columns from tablename; 可以查看各个字段的 整理规则;

最完整的现实字符集的命令是: status; 可以显示 默认的 windows平台下的 "服务器的字符集: latin1, db 字符集: latin1, connect字符集: gbk, client字符

集:gbk. "

也就是说, 从服务器,到数据库, 到表 都可以指定 "字符集", 而字段却不能指定字符集, 只能指定 "整理规则", (这个整理规则中就 可以认为 包含了 字段的字符集,

以及比较/排序 规则). 即使前3个层次的字符集默认的 都是 latin1, 但是 如果 字段的 "整理"为 gbk_chinese_ci的话, 也能正常显示中文.

mysql的版本是5.5.8-log, 其中的log表示开启了binlog功能, 有日志记录和日志管理功能.
5.0以后的mysql版本,采用bin二进制的日志格式. show master logs; 命令可以查看当前有哪些日志文件; set sql_log_bin=0/1; 用来关闭/打开日志功能;

mysqlbinlog 日志文件...; 显示查看日志.
日志文件: mysql-bin.index是日志文件 的清单; mysql-bin.000001, 是二进制文件,要用mydqlbinlog命令专门查看...

保证几个方面:

  1. mysql的server db table 的字符集应该一致,且与中文兼容(能显示中文,如gbk,gb2312,utf8, big5等等);
  2. 连接字符集同1, 包括: character_set_client = character_set_connection = charater_set_results = 兼容中文字符集之一; 可以用一个命令来解决:  set names 'gbk/utf8/gb2312等', ===== set charset-names ...
  3. 表中的字段的 collation要设为 兼容中文之一, 且与1,2 相同.
    当修改了 mysql服务器的1,2,后, 要重启mysqld 服务!!

如果这个还不行, 就考虑 编辑器的 编码字符集也同上1.

具体到上面的操作就是:

  1. insert命令后面要加上 into 关键字才行;
  2. 要设置服务器和数据库的字符集的命令是: set character_set_server='utf8' , 注意utf和8之间没有横线;set character_set_database='utf8'等等, 其他类似的变量都是同样的设置。 但是这个设置好像只能生效一次, 要长期生效?????????????、

  3. 创建时,要设置表的字符集, 命令是 default charset=utf8 , 这里注意是charset, 是character set两个单词的缩写, 不是两个 单词分开写的!
  4. mysql中 查看字符集和collation的命令是:
    show charater set; show collation, 但是你要注意, 这个是系统提供的、在系统中有的, 可以设置的字符集和校验, 但并不是当前server-db-table设置的字符集。
    要查看当前机器上的数据库字符集, 要使用 show variables;
    但是, show variables查看的是所有的 当前数据库系统正在运行的 变量包括字符集的设置, 所以,要查看其中某一些某一类的变量, 用like 来过滤, 如show variables like 'char%'...

  5. mysql的主配置命令, 是 etc下的 my.cnf, 注意是cnf, 不是config, 辅助配置文件目录是: /etc/my.cnf.d, 而他的数据等实体放在: /var/share/mysql中, 里面有很多的内容和东西...