Django 使用MYSQL数据库 Latin1
公司mysql统一用latin1的编码,真是叫人苦不堪言。Django用默认UTF8访问MYSQL数据库。在操作数据库时,不管你怎么转码,最终写到数据库里的中文都是乱码。在网上找了很久,也没解决这个问题。
后来看了一个DJANGO的MYSQL操作的源码,发现了一些问题 先是/django/db/backends/mysql/base.py 文件的 257 到263行
def _cursor(self):
if not self._valid_connection():
kwargs = {
'conv': django_conversions,
'charset': 'utf8',
'use_unicode': True,
}
关键在这两行2def _cursor(self):
261 'charset': 'utf8',
262 'use_unicode': True,
这说明,操作数据库用的是通用编码utf8 而且是硬编码进去的。如果我也硬编码改这里的话,以后有UTF8的库的话,就糟糕了。所以要想办法将这两项写到配置文件里。所以选注释掉这两行。在settings_dict = self.settings_dict 这行下面添加如下的代码
if settings_dict['USE_UNICODE']:
kwargs['use_unicode'] = settings_dict['USE_UNICODE']
else:
kwargs['use_unicode'] = True
if settings_dict['DATABASE_CHARSET']:
kwargs['charset'] = settings_dict['DATABASE_CHARSET']
修改settings.py 加入如下两行
TEST_DATABASE_CHARSET = 'latin1'
USE_UNICODE = False
但这样改了之后,会找不到DATABASE_CHARSET和USE_UNICODE 这说明在配置转进来之前做了筛选,再继续看这个文件/django/db/__init__.py 会看到这样的代码
connection = backend.DatabaseWrapper({
'DATABASE_HOST': settings.DATABASE_HOST,
'DATABASE_NAME': settings.DATABASE_NAME,
'DATABASE_OPTIONS': settings.DATABASE_OPTIONS,
'DATABASE_PASSWORD': settings.DATABASE_PASSWORD,
'DATABASE_PORT': settings.DATABASE_PORT,
'DATABASE_USER': settings.DATABASE_USER,
'TIME_ZONE':
相关文档:
最近在MySQL上做了点工作,发现很多人都在询问MySQL嵌套查询的问题,许多人都觉得MySQL不支持嵌套查询,其实MySQl从4.11版后已经完全支持嵌套查询了,那么下面我举些简单的嵌套查询的例子吧(源程序来自MySQL User Manual):
1. SELECT语句的子查询:
语法: SELECT ... from (subquery) AS name ...
先创建一个表:
......
how to install apache, PHP and MySQL on Linux
This tutorial explains the installation of Apache web server, bundled with PHP and MySQL server on a Linux machine. The tutorial is primarily for SuSE 9.2, 9.3, 10.0 & 10.1 operating systems, but most of the steps ought to be valid for all Linux-lik ......
how to install apache, PHP and MySQL on Linux
This tutorial explains the installation of Apache web server, bundled
with PHP and MySQL server on a Linux machine. The tutorial is primarily for SuSE
9.2, 9.3, 10.0 & 10.1, but most of the steps ought to be valid for all
Linux-like operating ......
虽然说我们尽量在写程序的时候控制插入到数据库的数据,而不要用数据库去判断数据的对错,但是有时候为了方便还是需要数据库自身的容错能力来帮助我们达到目的的。举例说明:
创建如下数据表
CREATE TABLE `book` (
`id` int(11) default NULL,
`num` int(11) unsigned default NULL
) ENGINE=InnoDB DE ......
我在登录MySQL后的命令行是这个样子的:
warmbupt@pchuang:/windows/MyCode/SS$ mysql -u root -ppassw0rd
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.1.37-1ubuntu5.1 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the curr ......