mysql字符乱码
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,1)MySQL插入中文数据乱码问题:模拟乱码现象:mysql> create database kitty;Query OK, 1 row affected (0.00 sec)mysql> show
千家信息网最后更新 2024年11月26日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安全错误
数据库的锁怎样保障安全
本地有两个数据库实例
数据库外码怎样同步修改
shell 连接数据库日志
软件开发在西安的薪资待遇
计算机网络技术可专升本吗
银河麒麟服务器V4安装教程
力控数据报表连接数据库
东华 数据库
oa网络安全
华州审批局网络安全宣传
深圳二手服务器回收选哪家
网络安全大数据培训班
服务器赞助
网络安全产品安可目录
网络安全检测服务活动策划
剑网 服务器
郑州网络安全空间科技馆图片
金蝶自动安装数据库连接
连接的数据库的地址是什么
如何查找学校服务器
网管怎么制作服务器
学习通数据库怎么样
小红书提示未连接服务器
数据库设计有哪几部分
网络技术发展的作文
根据网络安全法 反恐怖主义
移动代理商网络安全承诺书
软件开发最主要学什么
苏州财务软件开发教程
如何查找学校服务器