<?php mysql_query(“SET NAMES ‘utf8′”); ?>
由於php mysql set utf8_general_ci, 但是在table column set左latin1_swedish_ci, 就會產生
#1267 – Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘like’
SELECT * FROM `table` WHERE `field` like ‘%這些%’
改成
SELECT * FROM `table` WHERE `field` like ‘%這些%’ COLLATE utf8_general_ci
Database, MYSQL, PHP, Program
COLLATE, Illegal mix of collations, mysql
CREATE TABLE `test` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE = MYISAM
今次 測試insert情況,
INSERT INTO `test2` VALUES (0)
在測試所見, 如果id 是零, 它會在最後insert
第2次INSERT 我嘗試 -1
INSERT INTO `test2` VALUES (-1)
結果是順利INSERT -1
第3次INSERT我再嘗試零
INSERT INTO `test2` VALUES (0)
結果也一樣, 在最後出現
(雖然這個測試好似好淺, 但這個是非常重要..)
Important: 在傳送資料(在一個舊table資料傳送一個新table), 如果有id 是零是非常嚴重
例如:
CREATE TABLE `test`.`test2` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = MYISAM
CREATE TABLE `test`.`test3` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = MYISAM
舊table
id |
data |
0 |
abc |
1 |
def |
2 |
ghi |
INSERT IGNORE INTO test3
SELECT *
FROM test2
當資料傳送後, 新table的情況,
在測試時, 其實insert不一定是跟id 去insert
有可能insert的次序是有機會亂(也可能是 1, 0,2)
如果id是 fk 那資料就全錯了
CREATE TABLE `test`.`test2` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`data` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = MYISAM
MYSQL
auto_increment, Database
這是一個非常有興趣測試,我嘗試設置一個field是id int(1), 另一個filed是name varchar(255)
CREATE TABLE `test` (
`id` INT( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = innodb;
當我進行9次insert name的時候, 我就疑問, 第十個insert 將會發生error,
可是我繼續insert的時候, 他是沒有發生這個錯誤, 而且可以繼續增加到int 直到最大數目 – 2147483647
insert into `test` (`name`) VALUES (‘name 1’), (‘name 2’), (‘name 3’), (‘name 4’), (‘name 5’), (‘name 6’), (‘name 7’), (‘name 8’), (‘name 9’), (‘name 10’)
測試後其實int 是可以超出設定上限, 直到最大上限
覺得有趣的是設定上限後, 也能超出, 為什麼mysql不一開始就好似text, 不用預設一些上限
總是我不設int上限, 他也會幫我設定int(11)
MYSQL
Database, int type, mysql