顯示具有 sql 標籤的文章。 顯示所有文章
顯示具有 sql 標籤的文章。 顯示所有文章

2009年5月4日 星期一

Django+MySQL在admin下發生錯誤訊息

上週在練習django搭配mysql時,在建立user時發生了下面這個問題:(註0)

這兩天在研究admin模塊,製作一個數據管理系統,發現輸入中文時雖然數據可以正常輸入sql數據庫,但是在save時會報錯。查文檔,搜索都沒有找到問題所在,查看數據庫時終於發現了原因,下面給出解決方法。

錯誤類似於"

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'
for column 'message' at row 1

"

這個錯誤的解決方法是設置數據庫"auth_message"表的message一項使用utf8_unicode_ci

對於錯誤"

Incorrect string value: '\xE6\xA2\xB5\xE8\x92\x82...'
for column 'object_repr' at row 1

"

解決方法是設置django_admin_log表的object_repr一項使用utf8_unicode_ci

我看不懂它的解決方法"使用utf8_unicode_ci"…應該說不知道怎麼去單獨設置那些欄位的設定… 0rz。

我的方法是,上google查了一下,將mysql的my.ini (註1)設定修改如下:

修改 MySQL Server 的系統設定檔

修改 /etc/my.cnf (註1):
引用:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8

最後把資料庫drop掉(我取名為django),重新建立create database django ,在mysql console下use django,輸入status,確定資料庫的設定(Db characterset)都為utf8,這樣上面的問題就解決了。

2009-05-04_102723

結論是,在剛開始建立資料庫時,就要把編碼手動給utf8了,不然會照mysql的預設值(latin)。

註0: 搭配python 2.5附的sqlite3就沒這問題。

註1: 我的mysql server是裝在windows上,所以修改的是my.ini。

2009年1月20日 星期二

SQL Transaction的基本使用

SQL語法有一個語法,用來確保一整個流程是否正常完成,否則就取消先前的動作。

我個人是用交易(以下都用這個字詞)來理解這個動作。

語法:

開始交易

begin transaction

結束交易

end transaction

or
commit

取消交易

rollback

 

取消的結果就是,從開始交易之後的所有修改資料的動作(包括insert, update, delete)到rollback為止,全都會被復原到開始前的狀態。

結束交易的結果就是,確定執行交易的內容(中間修改的動作),之後就不能復原了。

ps. 在SQLite裡面 begin transaction可以省略為 begin,結束可以用end 。

延伸閱讀: SQLite Query Language: BEGIN TRANSACTION

2008年8月7日 星期四

T-SQL筆記

如何查詢指定的資料庫是否存在? 語法:
use master
select * from sysdatabases where name='database_name'
如何查詢指定的表格是否存在? 語法:
select * from information_schema.tables
where table_name='table_name'

2008年7月29日 星期二

如何讓T-SQL的篩選條件區分大小寫?

資料來源 基本上,就是在條件後面多加 "Collate SQL_Latin1_General_CP1_CI_AS" 應該就會區分大小寫了。 範例:
SELECT *
FROM dbo.CaseSensitiveTest
WHERE Value1 LIKE '%Test%' Collate SQL_Latin1_General_CP1_CI_AS
GO