还是数据库中文问题

中文字符问题,是数据库重要问题之一。昨晚开始做的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


MariaDB [bypDB]> status
--------------
mysql  Ver 15.1 Distrib 10.2.13-MariaDB, for Win64 (AMD64)

Connection id:          14
Current database:       bypDB
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.2.13-MariaDB mariadb.org binary distribution
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 5 min 1 sec

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”,奇怪!但是后来不用启动数据库,再次进入修改图片描述,发现,可以了!




修改my.cnf  注意:linux系统的时下划线



#
# 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
#


Last update: 2021-07-21|Pageview:441
Research Blog: EC | EC_INFO | EC_WORK |


BypResearch