mysql字符乱码
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,1)MySQL插入中文数据乱码问题:模拟乱码现象:mysql> create database kitty;Query OK, 1 row affected (0.00 sec)mysql> show
千家信息网最后更新 2025年11月10日mysql字符乱码
1)MySQL插入中文数据乱码问题:
模拟乱码现象:mysql> create database kitty;Query OK, 1 row affected (0.00 sec)mysql> show create database kitty\G;*************************** 1. row *************************** Database: kittyCreate Database: CREATE DATABASE `kitty` /*!40100 DEFAULT CHARACTER SET utf8 */1 row in set (0.00 sec)ERROR: No query specifiedmysql> alter database kitty character set latin1;Query OK, 1 row affected (0.01 sec)mysql> flush privileges;mysql> use kitty;Database changed创建teacher表(字符集为latin1):CREATE TABLE `teacher` ( `id` int(4) NOT NULL, `name` char(20) NOT NULL, `age` tinyint(2) NOT NULL DEFAULT '0', `dept` varchar(16) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1插入两条数据,其中一行带有中文字符mysql> insert into teacher values(1,'wanlong','31','Server'),(2,'laomao','31','售后部');Query OK, 2 rows affected, 1 warning (0.00 sec)Records: 2 Duplicates: 0 Warnings: 1mysql> flush privileges;Query OK, 0 rows affected (0.00 se查看发现有乱码出现:mysql> select * from teacher;+----+---------+-----+--------+| id | name | age | dept |+----+---------+-----+--------+| 1 | wanlong | 31 | Server || 2 | laomao | 31 | ??? |+----+---------+-----+--------+2 rows in set (0.00 sec)
2) 如何解决乱码了
不乱码的思想:建议中英文混合的环境,选择utf-8
客户端:
set names utf8(临时生效)
修改my.cnf(永久生效)
[client]
default-character-set=utf8
服务端-库-表-程序
服务端:[mysqld]default-character-set=utf8(适合5.1及以前的版本)character-set-server=utf8(适合5.5)库:查看数据库的编码:mysql> show variables like'%char%';+--------------------------+-------------------------------------------+| 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 | /application/mysql-5.5.32/share/charsets/ |+--------------------------+-------------------------------------------+8 rows in set (0.00 sec)表:查看表的编码:mysql> show create table teacher\G;*************************** 1. row *************************** Table: teacherCreate Table: CREATE TABLE `teacher` ( `id` int(4) NOT NULL, `name` char(20) CHARACTER SET latin1 NOT NULL, `age` tinyint(2) NOT NULL DEFAULT '0', `dept` varchar(16) CHARACTER SET latin1 DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)ERROR: No query specifiedmysql> select * from teacher;+----+---------+-----+--------+| id | name | age | dept |+----+---------+-----+--------+| 1 | wanlong | 31 | Server || 2 | laomao | 31 | ??? || 3 | kobe | 35 | ??? |+----+---------+-----+--------+3 rows in set (0.00 sec)mysql> show create table teacher\G;*************************** 1. row *************************** Table: teacherCreate Table: CREATE TABLE `teacher` ( `id` int(4) NOT NULL, `name` char(20) CHARACTER SET latin1 NOT NULL, `age` tinyint(2) NOT NULL DEFAULT '0', `dept` varchar(16) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)ERROR: No query specified修改字段的字符集:mysql> alter table `teacher` change `dept` `dept` varchar(16) CHARACTER SET utf8 NOT NULL;mysql> alter table `teacher` change `name` `name` char(20) CHARACTER SET utf8 NOT NULL;mysql> show full columns from teacher;+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+--| Field | Type | Collation | Null | Key | Default | Extra | Privileges | C+-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+--| id | int(4) | NULL | NO | | NULL | | select,insert,update,references | | name | char(20) | utf8_general_ci | NO | | NULL | | select,insert,update,references | | age | tinyint(2) | NULL | NO | | 0 | | select,insert,update,references | | dept | varchar(16) | utf8_general_ci | NO | | NULL | | select,insert,update,references | +-------+-------------+-----------------+------+-----+---------+-------+---------------------------------+--4 rows in set (0.00 sec)mysql> select * from teacher;+----+---------+-----+--------+| id | name | age | dept |+----+---------+-----+--------+| 1 | wanlong | 31 | Server || 2 | laomao | 31 | ??? || 3 | kobe | 35 | ??? |+----+---------+-----+--------+3 rows in set (0.00 sec)测试再次插入带有中文字符的字段:mysql> insert into teacher values(4,'万龙',30,'校园网'),(5,'知行',29,'华东院');Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql> select * from teacher;+----+---------+-----+-----------+| id | name | age | dept |+----+---------+-----+-----------+| 1 | wanlong | 31 | Server || 2 | laomao | 31 | ??? || 3 | kobe | 35 | ??? || 4 | 万龙 | 30 | 校园网 || 5 | 知行 | 29 | 华东院 |+----+---------+-----+-----------+5 rows in set (0.00 sec)
3)老数据仍旧是乱码!
说明:
a)对于已有数据库想修改字符集不能直接通过"alter database kitty character set *"或者"alter table tablename character set *",这两个命令都没有更新已有记录的字符集,而只是对新创建的表或记录生效。
b)已经有记录的字符的调整,必须先将数据导出,经过修改字符集后重新导入后才可完成
修改数据库默认编码:
"alter database kitty character set *"
4)参考解决方法:
如何更改生产MySQL数据库库表的字符集
1、导出表结构mysqldump -uroot -predhat12345 -S /data/3306/mysql.sock --default-character-set=latin1 -d kitty>kittytable.sql说明:-d只导表结构2、编辑kittytable.sql,将lantin1改成utf8可以用sed批量修改3、确保数据库不再更新,导出所有数据mysqldump -uroot -predhat12345 -S /data/3306/mysql.sock --quick --no-create-info --extended-insert --default-character-set=latin1 kitty>kittydata.sql4、打开kittydata.sql,将set names latin1修改成set names utf85、删除原有的库表及数据(需要慎重)6、建库create database kitty default charset utf8;7、创建表,执行kittytable.sqlmysql -uroot -predhat12345 -S /data/3306/mysql.sock kitty
5)执行SQL文件插入中文数据不乱码实战:
a、将需要更新的sql语句放到文本文件中
mysql> system cat test.sqlset names utf8;insert into teacher values (6,'张飞',45,'商务部');b、通过source来调用sql文件
mysql> source test.sqlQuery OK, 0 rows affected (0.00 sec)Query OK, 1 row affected (0.01 sec)mysql> select * from teacher;+----+---------+-----+-----------+| id | name | age | dept |+----+---------+-----+-----------+| 1 | wanlong | 31 | Server || 2 | laomao | 31 | ??? || 3 | kobe | 35 | ??? || 4 | 万龙 | 30 | 校园网 || 5 | 知行 | 29 | 华东院 || 6 | 张飞 | 45 | 商务部 |+----+---------+-----+-----------+6 rows in set (0.00 sec)
数据
字符
乱码
字符集
数据库
中文
文件
校园
校园网
编码
知行
华东
万龙
更新
商务
字段
结构
商务部
服务
一行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
印度网络安全问题
服务器怎么弄启动器
一个软件开发项目流程图
云南gps授时模块服务器
贵州信创国产化服务器
戴尔服务器感叹号亮黄灯
Ios读取服务器数据库
数据库项目经理收获
服务器级别ip安全策略
直播电商app软件开发
软件开发售后有保障
JSP数据库删除技术
江阴先进网络技术服务价格
qt数据库编程图解
幼儿网络安全手抄报图片
如何看数据库服务器设置
售后和软件开发
计算机网络技术难度大吗
电脑服务器地址怎么看
国际管节点数据库
邮件服务器域名
中国软件开发公司
蚌埠软件开发培训哪家专业
芜湖蓝孵互联网科技有限公司成都
雨云服务器安全么
计算机考试数据库技术真题
地方方志数据库
阿里云云服务器运行音乐
肇庆教育软件开发收费
工信部网络安全体系