mysql 乱码问题

3 篇文章 0 订阅
1 篇文章 0 订阅


mysql 中英文插入时,出现乱码无法插入的问题。

由于是Ubuntu的机器,mysql的配置文件是:/etc/mysql/my.cnf


设置了下配置文件my.cnf的编码为utf8:
[client]
default-character-set=utf8


#default-character-set=utf8  #这个太坑爹了,在mysql 5.+版本上设置,mysql直接启动不起来了。
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
#for php
skip-character-set-client-handshake


[mysql]
default-character-set=utf8


重启mysql 还是无法插入中文。
sudo /etc/init.d/mysql start/stop/restart


在网上搜索了半天,都是说经过上面的设置就搞定了,但是还是不行。于是直接手动修改使用的mysql数据库编码:

ALTER DATABASE buildtools DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

这样数据库的默认编码就成了utf8了,

通过下面命令可以查看当前数据库使用的编码情况:


SHOW CREATE DATABASE db_name;
show variables like 'collation%';
show variables like 'char%';


再删除之前创建的所有数据库,重新运行python manager syncdb 创建数据库,所有表就都是utf8编码了。


试着插入中文,结果还是无法插入,错误log有所变化:
Error:Warning: Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95...' for column 'object_repr' at row 1


发现时django_admin_log的数据表没有不是utf8


show create table django_admin_log;


| django_admin_log | CREATE TABLE `django_admin_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `action_time` datetime NOT NULL,
  `user_id` int(11) NOT NULL,
  `content_type_id` int(11) DEFAULT NULL,
  `object_id` longtext,
  `object_repr` varchar(200) NOT NULL,
  `action_flag` smallint(5) unsigned NOT NULL,
  `change_message` longtext NOT NULL,
  PRIMARY KEY (`id`),
  KEY `django_admin_log_6340c63c` (`user_id`),
  KEY `django_admin_log_37ef4eb4` (`content_type_id`),
  CONSTRAINT `content_type_id_refs_id_93d2d1f8` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`),
  CONSTRAINT `user_id_refs_id_c0d12874` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1 |

修改django_admin_log 表以及对应字段的编码

ALTER TABLE django_admin_log DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE django_admin_log MODIFY object_repr VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
ALTER TABLE django_admin_log MODIFY object_id longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
ALTER TABLE django_admin_log MODIFY change_message longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;


show create table django_admin_log;


已经修改好了。。。

| django_admin_log | CREATE TABLE `django_admin_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `action_time` datetime NOT NULL,
  `user_id` int(11) NOT NULL,
  `content_type_id` int(11) DEFAULT NULL,
  `object_id` longtext COLLATE utf8_unicode_ci NOT NULL,
  `object_repr` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `action_flag` smallint(5) unsigned NOT NULL,
  `change_message` longtext COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `django_admin_log_6340c63c` (`user_id`),
  KEY `django_admin_log_37ef4eb4` (`content_type_id`),
  CONSTRAINT `content_type_id_refs_id_93d2d1f8` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`),
  CONSTRAINT `user_id_refs_id_c0d12874` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |


再插入中文,OK。

PS: mysql 批处理。
BEGIN;
DROP TABLE `admins_email`;
DROP TABLE `admins_buildrecord`;
DROP TABLE `admins_patchpackage`;
DROP TABLE `admins_channelpackage`;
DROP TABLE `admins_package`;
DROP TABLE `admins_channelstrategy`;
DROP TABLE `admins_channel`;




COMMIT;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值