还是数据库中文问题
中文字符问题,是数据库重要问题之一。昨晚开始做的BypPhoto就出现中文乱码问题,导致不能写入数据库:
出错: UPDATE Photo set ImageFileName='20180317_IMG_0967.JPG', ImageDay='20180317', Description='开会' WHERE Id ='2677' Incorrect string value: 'xE5xBCx80xE4xBCx9A' for column 'Description' at row 1
注意:本文描述的问题情况都是在windows环境下。
命令行查看表的字符编码:
show create table Photo;显示该表的字符:ENGINE=InnoDB AUTO_INCREMENT=3281 DEFAULT CHARSET=latin1
解决方法:
尝试1:使用命令:(后来发现,其实字段没有修改!)
ALTER TABLE Photo DEFAULT CHARACTER SET utf8;就可以更改为:DEFAULT CHARSET=utf8
操作完后,虽然重启了数据库。但是发现问题依然?!
尝试2:
先查看数据库状态:进入命令行数据库操作,use 数据库;输入命令:
status
Threads: 7 Questions: 25 Slow queries: 0 Opens: 18 Flush tables: 1 Open tables: 12 Queries per second avg: 0.083
网上查询有修改的命令:
MariaDB [bypDB]> set charset_set_server=utf8;
ERROR 1193 (HY000): Unknown system variable 'charset_set_server'
但是失败。并且据说,这种方法的修改在数据库重新启动后,就失效。应该还是要修改my.ini(windows下的配置文件)
于是打开my.ini(C:Program FilesMariaDB 10.2data),在[mysqld]部分增加:character_set_server=utf8
然后重启数据库。接着进入命令行数据库,输入status命令查看:
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
已经全面修改为uft8了。
但是发现问题依然?!
进入数据库使用命令
show create table Photo;
发现其实相关的字段其实字符集没有改!
`ExifInfo` text CHARACTER SET latin1 DEFAULT NULL COMMENT 'EXIF的信息',
`Description` text CHARACTER SET latin1 DEFAULT NULL COMMENT '图片描述',
使用命令修改(注意在表名、字段名不要用单引号,有些系统需要。)
alter table Photo modify column Description text CHARACTER SET utf8 DEFAULT NULL COMMENT '图片描述';但是使用show create table Photo命令后,发现: `Description` text DEFAULT NULL COMMENT '图片描述', 没有了“CHARACTER SET”,奇怪!但是后来不用启动数据库,再次进入修改图片描述,发现,可以了!
# # This group is read both both by the client and the server # use it for options that affect everything # #[mysqld] #default_character_set=utf8; [mysqld] character_set_server=utf8 [client] default_character_set=utf8 [mysql] default_character_set=utf8 # # include all files from the config directory #