数据库生僻字处理
最近项目中客户录入地址时,有个𠙶(ou)字,导致信息录入报错,后台一看,不支持该字符集
记录一下处理方式
- 数据方面
进入mysql的安装目录找到对应的端口下的my.cnf文件
编辑my.cnf文件
vi my.cnf
在[client]标签下增加配置
default-character-set = utf8mb4
文件末尾增加如下配置
# 设置表字段排序规则
init_connect='SET collation_connection = utf8mb4_unicode_ci'
# set names utf8 是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置
init_connect='SET NAMES utf8mb4'
# 设置数据库编码
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 此处是忽略客户端的字符集,使用服务器的设置
skip-character-set-client-handshake
- 服务方面
增加数据库连接配置
<property name="connectionInitSqls" value="set names utf8mb4;"/>
3. 数据方面
如果按上述配置后,还是无法保存生僻字。
检查该表所在库的字符集与排序规则,然后再检查表跟字段的字符集与排序规则
执行以下SQL可查看哪些字段字符集与排序规则不一致。最后将需要修改的字段copy出来执行即可
SELECT
TABLE_SCHEMA '库名',
TABLE_NAME '表名',
COLUMN_NAME '字段',
CHARACTER_SET_NAME '原字符集',
COLLATION_NAME '原排序规则',
CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' MODIFY COLUMN ', COLUMN_NAME, ' ', COLUMN_TYPE, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) '修正SQL'
FROM
information_schema.`COLUMNS`
WHERE
TABLE_SCHEMA = '库名' and COLUMN_TYPE NOT LIKE '%int%';