今天創建數據庫時,在插入數據時出現了幾個問題。(首次在LInux環境下創建數據庫)
一個是關於SQL Error [1146] [42S02]: Table 'struts2exec.s_user' doesn't exist
網上搜查到的帖子如下:
項目在開發的時候在WINDOWS平台下開發的,開發完了之后在LINUX環境上部署好之后,運行時MySQL數據庫報錯,提示為某個表不存在之類的錯誤信息,后來修改了MySQL的配置文件將大小寫敏感去掉,問題解決。
編輯/etc/my.cnf文件,在[mysqld]節下 添加 lower_case_table_names=1 參數,並設置相應的值 (備注:為0時大小寫敏感,為1時大小寫不敏感,默認為0)。
編輯MySQL安裝目錄下的my.ini文件,在[mysqld]節下 添加 lower_case_table_names=1(備注:為0時大小寫敏感,為1時大小寫不敏感,默認為1),可以實現MySql按照建表Sql語句的大小寫狀態來定義表名。
在 MySQL 中,數據庫和表其實就是數據目錄下的目錄和文件,因而,操作系統的敏感性決定數據庫和表命名的大小寫敏感。這就意味着數據庫和表名在 Windows 中是大小寫不敏感的,而在大多數類型的 Unix/Linux 系統中是大小寫敏感的。
但是按照教程在my.cnf下並沒有mysqld,於是只好在插入數據時嚴格區分大小寫。
另一個則是關於SQL Error [1054] [42S22]: Unknown column 'xxx' in 'field list
很顯然,這是編碼問題,解決方案如下:
修改表的編碼格式:
ALTER TABLE `table` DEFAULT CHARACTER SET utf8;
但是雖然修改了表的編碼格式,但是字段的編碼格式並沒有修改過來,又發現一條語句,作用是修改字段的編碼格式:
ALTER TABLE `tablename` CHANGE `字段名1` `字段名2` VARCHAR(36) CHARACTER SET utf8 NOT NULL;
但是一次只能修改一個字段,還是很麻煩,不方便,最后找到這么一條語句,可以修改整張表的字段:
alter table `tablename` convert to character set utf8;