Editing
排除 MySQL 技術疑難問題
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
排除 MySQL 技術疑難問題 {{LanguageSwitcher | content = [[Troubleshooting of MySQL errors | English]], [[排除 MySQL 技術疑難問題|漢字]]}} 本文探討了使用 MySQL 時遇到的各種常見問題,並根據其性質和影響將它們分為七個不同的類別。這些類別有助於識別潛在的問題並促進高效的故障排除。這些問題分類如下: # 安裝和配置問題:與 MySQL 設置和配置相關的問題。 # 資料庫和表操作錯誤:在創建、刪除或訪問資料庫和表時出現的問題。 # 訪問和認證錯誤:涉及用戶權限和認證的錯誤。 # SQL 和查詢錯誤:與 SQL 查詢的語法和執行相關的問題。 # 連接和網路錯誤:用戶端與 MySQL 伺服器之間的連接問題。 # 資源和環境錯誤:由系統資源如磁碟空間、記憶體限制或文件系統權限引起的錯誤。 # 其他工具特定錯誤:特定於資料庫工具(如 Navicat)的錯誤,或來自腳本環境(如 PHP)的問題。 == 安裝和配置問題 == === 找不到檔案 mysqldump === # 尋找 mysqldump 檔案的位置 #* 在 {{Mac}} 或 {{Linux}} 上輸入命令 {{kbd | key=<nowiki>sudo find / -iname mysqldump</nowiki>}} #* 如果你安裝了 #** [https://www.apachefriends.org/index.html XAMPP] 在 {{Mac}} 上: 完整路徑是 {{kbd | key=<nowiki>/Applications/XAMPP/xamppfiles/bin/mysqldump</nowiki>}} #** [https://www.apachefriends.org/index.html XAMPP] 在 X 磁碟上的 {{Win}}: 完整路徑是 {{kbd | key=<nowiki>X:\xampp\mysql\bin\mysqldump.exe</nowiki>}} #** [https://www.mamp.info/en/ MAMP & ''$'' MAMP PRO] 在 {{Mac}} 上: 完整路徑是 {{kbd | key=<nowiki>/Applications/MAMP/Library/bin/mysqldump</nowiki>}} # 輸入 mysqldump 命令的完整路徑 #* 之前導致錯誤的命令 {{kbd | key=<nowiki>mysqldump -h 127.0.0.1 -u root -p --force --single-transaction DATABASE_NAME | pv | gzip -c > DATABASE_NAME.sql.gz</nowiki>}} #* 新命令 {{kbd | key=<nowiki>/Applications/XAMPP/xamppfiles/bin/mysqldump -h 127.0.0.1 -u root -p --force --single-transaction DATABASE_NAME | pv | gzip -c > DATABASE_NAME.sql.gz</nowiki>}} === 無法在 Windows 上啟動 MySQL 服務 === # [https://dev.mysql.com/doc/refman/5.7/en/data-directory.html MySQL 數據目錄] 需被 {{kbd | key=NETWORK SERVICE}} 在 Windows Server 2008 上有寫入權限<ref>[https://errerrors.blogspot.com/2016/12/mysql-windows-server-2008-r2.html 如何修改 MySQL 伺服器的資料目錄 (Windows Server 2008 R2)]</ref> # 目錄 {{kbd | key=secure-file-priv}} 需被 {{kbd | key=NETWORK SERVICE}} 在 Windows Server 2008 上有寫入權限 == 資料庫和表操作錯誤 == === 無法開啟單表表空間檔案 filename.ibd === 版本:XAMPP 5.6.15-1,運行於{{Mac}} 狀況:Mac 意外關機,且資料庫沒有正常關閉。重啟 Mac 後,無法啟動 MySQL 服務<ref>[http://stackoverflow.com/questions/35184367/error-could-not-open-single-table-tablespace-file-scrapers-records-ibd mysql - Error: could not open single-table tablespace file .\scrapers\records.ibd - Stack Overflow]</ref><ref>[http://chepri.com/our-blog/mysql-innodb-corruption-and-recovery/ MySQL Won't Start - InnoDB Corruption and Recovery. - Chepri]</ref>。 可能的解決方案: # 編輯位於:/Applications/XAMPP/xamppfiles/etc/my.cnf 的 MySQL 設定檔 # 增加此行:{{kbd | key=<nowiki>innodb_force_recovery = 1</nowiki>}} # 嘗試啟動 MySQL 服務 # 如果 MySQL 服務成功啟動,編輯 MySQL 設定檔並註釋掉這行:{{kbd | key=<nowiki>#innodb_force_recovery = 1</nowiki>}} # 重啟 MySQL 服務 === errno 41 - 刪除資料庫時出錯 === 訊息:執行 '''DROP DATABASE `TABLE_NAME`''' 時出現 '''錯誤刪除資料庫(無法刪除目錄 '.\TABLE_NAME',errno: 41)'''; 解決方案:[https://stackoverflow.com/questions/17947255/error-in-dropping-a-database-in-mysql-cant-rmdir-oro-errno-41/19888293 phpmyadmin - 刪除 MySQL 中的資料庫時出錯(無法刪除目錄 '.\oro',errno: 41)- Stack Overflow] === ERROR 1005 (HY000) at line xx: 無法創建表 'TABLE_NAME' (errno: 28) === 解決方案 * 檢查 mysql 數據文件夾所在的磁碟空間是否足夠。例如,在 {{Linux}} 上輸入 {{kbd | key=df -h}} * 更多資訊請見 [http://stackoverflow.com/questions/11045279/error-1005-hy000-cant-create-table-errno-150 mysql - ERROR 1005 (HY000): 無法創建表 (errno: 150) - Stack Overflow]。 === ERROR 1006 (HY000): 無法創建資料庫 'DATABASE_NAME' (errno: 28) === 解決方案 * 檢查 mysql 數據文件夾所在的磁碟空間是否足夠。例如,在 {{Linux}} 上輸入 {{kbd | key=df -h}} * 更多資訊請見 [http://stackoverflow.com/questions/18719748/error-1006-hy000-cant-create-database-errno-13-mysql-5-6-12 ERROR 1006 (HY000) 無法創建資料庫 (errno: 13) MySQL 5.6.12 - Stack Overflow]。 === ERROR 1010: Error dropping database (can't rmdir) === Message: <pre>Error dropping database (can't rmdir '.\<db_name>\', errno: 17)</pre> 解決方式 * 手動刪除資料庫目錄中殘留的非 MySQL 檔案(例如 .sql 檔案),再重新執行 DROP DATABASE;或直接手動刪除整個資料夾。 根本原因 * MySQL 的 DROP DATABASE 只會移除它所管理的檔案。資料目錄中若存在其他外來檔案(例如 .sql 備份檔),將導致 rmdir 無法移除資料夾,進而觸發 errno 17(ENOTEMPTY)。 === ERROR 1017 - Can't find file: '.\DATABASE\TABLE.frm' (errno: 22 - Invalid argument) === 訊息: [Err] 1017 - Can't find file: '.\DATABASE\TABLE.frm' (errno: 22 - Invalid argument) 解決方案: * 檢查 DATABASE\TABLE.frm 文件是否存在。如果不存在,可能需要在執行 MySQL 查詢前先創建該表。 * 檢查 DATABASE\TABLE.frm 文件或所在文件夾的權限<ref>[http://stackoverflow.com/questions/12106727/mysql-copying-tables-files-gives-rise-to-error-1017-hy000-cant-find-file MySQL,複製表文件出現 “ERROR 1017 (HY000): Can't find file:” 即使它在那裡 - Stack Overflow]</ref><ref>[https://www.percona.com/forums/questions-discussions/mysql-and-percona-server/2762-error-1017-hy000-can-t-find-file 錯誤 1017 (HY000): 找不到文件 - Percona 社區]</ref>。''未經驗證'' === ERROR 1052 - Column 'column_name' in field list is ambiguous === 訊息:Error Code: 1052. Column 'column_name' in field list is ambiguous 欄位列表中的 'column_name' 模糊不清 原因:由於 'column_name' 出現在兩個或多個表中...<ref>[https://stackoverflow.com/questions/19351633/error-code-1052-column-admin-id-in-field-list-is-ambiguous mysql - 錯誤代碼:1052 欄位列表中的 'admin_id' 模糊不清 - Stack Overflow]</ref> 解決方案:只保留一個表名 'column_name' 或添加表名別名。 === 錯誤 1054 - 'where 子句' 中未知的欄位 === 訊息:[Err] 1054 - 'where 子句' 中未知的欄位 'xxx' 解決方案: # 檢查 'xxx' 欄位名稱是否存在 # 如果 'xxx' 欄位名稱是由 [http://dev.mysql.com/doc/refman/5.7/en/example-user-variables.html 使用者定義的變數] 計算得出。將整個查詢放入另一個母查詢中。 <pre> -- 遇到錯誤訊息的查詢:[Err] 1054 - 'where 子句' 中未知的欄位 'rank' SELECT semi.*, IF(semi.id = semi.prev, @rank := @rank +1, @rank := 1 ) AS `rank` FROM ( ... ) semi WHERE semi.rank <= 10 </pre> 將整個查詢放入另一個母查詢中。 <pre> SELECT final.* FROM ( SELECT semi.*, IF(semi.id = semi.prev, @rank := @rank +1, @rank := 1 ) AS `rank` FROM ( ... ) semi ) final WHERE final.rank <= 10 </pre> === 錯誤 1114 (HY000): 表格 `TABLE_NAME` 已滿 === 可能的解決方案 * 因為 [https://dev.mysql.com/doc/refman/5.7/en/data-directory.html MySQL 數據目錄] 所在的硬碟分區已滿或幾乎已滿,釋放一些硬碟空間<ref>[http://stackoverflow.com/questions/730579/error-1114-hy000-the-table-is-full mysql - 錯誤 1114 (HY000): 表格已滿 - Stack Overflow]</ref>。 === 錯誤 1170: 在鍵規格中使用 BLOB/TEXT 欄位且沒有鍵長 === 情況 * 嘗試建立新表格時的 SQL 語法 <pre> DROP TABLE IF EXISTS `my_table`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `my_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `url` text COLLATE utf8mb4_unicode_ci NOT NULL, `status` tinyint(2) unsigned NOT NULL DEFAULT 1, PRIMARY KEY (`job_id`), UNIQUE KEY `url` (`url`) USING HASH ) ENGINE=InnoDB AUTO_INCREMENT=3573 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; </pre> 解決方案:在鍵規格中使用 BLOB/TEXT 欄位並指定鍵長,例如 {{kbd | key=`url`(500)}} <pre> DROP TABLE IF EXISTS `my_table`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `my_table` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `url` text COLLATE utf8mb4_unicode_ci NOT NULL, `status` tinyint(2) unsigned NOT NULL DEFAULT 1, PRIMARY KEY (`id`), UNIQUE KEY `url` (`url`(500)) ) ENGINE=InnoDB AUTO_INCREMENT=3573 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; </pre> === 錯誤 1813: 表格 xxx 的表空間已存在 === 訊息:錯誤 1813 表格 xxx 的表空間已存在。 解決方案 * [https://stackoverflow.com/questions/15694168/error-tablespace-for-table-xxx-exists-please-discard-the-tablespace-before-imp mysql - 錯誤:表格 xxx 的表空間已存在。請在導入前丟棄表空間 - Stack Overflow] === 錯誤 1049 (42000): 未知的資料庫 === 訊息:錯誤 1049 (42000): 未知的資料庫 'MY_DATABASE_p' 解決方案: * 檢查 'MY_DATABASE_p' 資料庫是否存在 * 如果您在使用控制台時希望連接到 'MY_DATABASE' 資料庫,請檢查資料庫名稱後是否沒有 {{kbd | key=TAB}} 字元。 === 錯誤 1070 (42000): 指定的鍵太長;最大鍵長為 767 位元組 === '''環境''': MySQL 5.6 '''根本原因''': "預設情況下,索引鍵前綴長度限制為 767 位元組。參見第 13.1.13 節,“CREATE INDEX 語句”。例如,在 TEXT 或 VARCHAR 列上,如果使用 utf8mb3 字元集,並且每個字元最多 3 位元組,您可能會在列前綴索引超過 255 個字元時達到此限制。當啟用 innodb_large_prefix 配置選項時,對於使用 DYNAMIC 或 COMPRESSED 行格式的 InnoDB 表,索引鍵前綴長度限制提高到 3072 位元組。" <ref>[https://dev.mysql.com/doc/refman/5.6/en/innodb-limits.html MySQL :: MySQL 5.6 參考手冊 :: 14.22 InnoDB 限制]</ref> '''解決方案'''<ref>[https://www.opencli.com/mysql/mysql-%E5%95%8F%E9%A1%8C-1071-42000-specified-key-was-too-long MySQL 問題: 1071 (42000): 指定的鍵太長]</ref><ref>[https://terrytongcc.com/%E5%A6%82%E4%BD%95%E8%A7%A3%E6%B1%BAmysql%E5%87%BA%E7%8F%BEerror-1118-row-size-too-large-8126%E5%95%8F%E9%A1%8C/ 如何解決 MySQL 出現 Error 1118: row size too large (> 8126) 問題 | Terry Tong – 全棧 Web 開發人員]</ref>: * 執行以下 SQL 查詢: <pre> SET GLOBAL innodb_file_format = Barracuda; SET GLOBAL innodb_file_format_max = Barracuda; </pre> * 修改 MySQL 配置文件 <pre> innodb_file_per_table = 1 innodb-file-format = BARRACUDA innodb-large-prefix = ON innodb_file_format_max = BARRACUDA </pre> * 重啟 MySQL 伺服器 * 執行以下 SQL 查詢: <pre> ALTER TABLE `table_name` ROW_FORMAT=COMPRESSED; </pre> == 訪問和認證錯誤 == === [Warning] Using a password on the command line interface can be insecure === 問題描述: 使用 bash 命令匯出或匯入 MySQL 資料庫時,可能會遇到以下警告:[警告] 在命令行介面上使用密碼可能不安全。 <pre> mysql: [Warning] Using a password on the command line interface can be insecure. or mysqldump: [Warning] Using a password on the command line interface can be insecure. </pre> 這通常發生在使用如下命令時: <pre> mysqldump -u USERNAME -p -h 127.0.0.1 --default-character-set=utf8 DATABASE > DATABASE.sql </pre> 解決方案:要解決此警告並提高安全性,請按照以下步驟操作: # 使用 [https://dev.mysql.com/doc/refman/8.4/en/mysql-config-editor.html mysql_config_editor] 設定登入路徑 (login path):{{kbd | key=<nowiki>mysql_config_editor set --login-path=local --host=localhost --user=root --password</nowiki>}} # 匯出或匯入 MySQL 資料庫時使用登入路徑 (1) 匯出時:{{kbd | key=<nowiki>mysqldump --login-path=local --default-character-set=utf8 資料庫名稱 > 資料庫名稱.sql</nowiki>}} (2) 匯入時:{{kbd | key=<nowiki>pv 資料庫名稱.sql.gz | gunzip | mysql --login-path=local --default_character_set utf8 --force 資料庫名稱</nowiki>}} # 查看所有已設定的登入路徑 {{kbd | key=<nowiki>mysql_config_editor print --all</nowiki>}} 透過使用登入路徑,可以避免在命令行中暴露密碼,解決安全警告。 === 錯誤 1044 (42000): 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME' === 訊息:{{kbd | key=<nowiki>錯誤 1044 (42000): 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME'</nowiki>}} <pre> pv file.sql.gz | gunzip | mysql -u USER -p --host=127.0.0.1 --default_character_set utf8 DATABASE_NAME </pre> 解決方案: * 檢查指定使用者名稱和資料庫名稱的權限 <pre> $ mysql -u USER -p --host=127.0.0.1 輸入密碼: mysql> use DATABASE_NAME </pre> 訊息:{{kbd | key=<nowiki>mysqldump: 執行 LOCK TABLES 時出錯: 1044: 拒絕使用者 'USER'@'localhost' 存取資料庫 'DATABASE_NAME'</nowiki>}} <pre> $ mysqldump -h 127.0.0.1 -u USER -p DATABASE_NAME TABLE_NAME > TABLE_NAME.sql </pre> 解決方案: * 如果無法給予使用者權限,添加 mysqldump 選項 {{kbd | key=<nowiki>--skip-lock-tables</nowiki>}} <ref>[https://stackoverflow.com/questions/7415698/skip-lock-tables-and-mysqldump mysql - 跳過鎖定表和 mysqldump - Stack Overflow]</ref>。 <pre> $ mysqldump -h 127.0.0.1 -u USER -p --skip-lock-tables DATABASE_NAME TABLE_NAME > TABLE_NAME.sql </pre> === 錯誤 1827 (HY000): 密碼哈希不符合預期格式。檢查是否使用了正確的密碼算法與 PASSWORD() 函數。 === 錯誤的 SQL 查詢如下: <pre> CREATE USER 'test'@'localhost' IDENTIFIED BY PASSWORD 'my_password'; </pre> 解決方案: (1) 檢查帳戶是否已創建 <pre> SELECT User,Host FROM mysql.user; </pre> (2a) 如果帳戶已創建,為該帳戶設定密碼。 <pre> SET PASSWORD FOR 'test'@'localhost' = PASSWORD('my_password'); </pre> (2b) 如果帳戶未創建,重新創建帳戶。 <pre> CREATE USER 'test'@'localhost' IDENTIFIED BY 'my_password'; </pre> 參考資料 * [http://dev.mysql.com/doc/refman/5.7/en/create-user.html MySQL :: MySQL 5.7 參考手冊 :: 14.7.1.2 CREATE USER 語法] * [http://dev.mysql.com/doc/refman/5.7/en/set-password.html MySQL :: MySQL 5.7 參考手冊 :: 14.7.1.7 SET PASSWORD 語法] * [http://dev.mysql.com/doc/refman/5.7/en/drop-user.html MySQL :: MySQL 5.7 參考手冊 :: 14.7.1.3 DROP USER 語法] === 錯誤 1045 (28000): 拒絕使用者存取 === 訊息:錯誤 1045 (28000): 拒絕使用者 'user'@'localhost' 存取(使用密碼:YES) 解決方案: * 檢查使用者名稱的打字錯誤。 * 檢查密碼的打字錯誤。 * 如果您正在使用控制台命令,如果密碼包含特殊字元,請轉義密碼,例如 {{kbd | key=<nowiki>mysql -u root -p'PASSWORD'</nowiki>}}<ref>[http://superuser.com/questions/123928/escaping-a-password-using-mysqldump-console 使用 mysqldump 控制台轉義密碼 - Super User]</ref> * 您可能需要刪除現有的帳戶設定並重新配置。 === 錯誤!: SQLSTATE[28000]: 無效的授權規格:1045 拒絕訪問 === 訊息:錯誤!: {{kbd | key=<nowiki>SQLSTATE[28000]: 無效的授權規格:1045 拒絕使用者 'user'@'localhost' 存取(使用密碼:YES)</nowiki>}} 解決方案: * 如果您執行了查詢 {{kbd | key=INTO OUTFILE}},您需要授予文件權限,例如:{{kbd | key=GRANT FILE ON *.* TO 'user'@'localhost';}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file MySQL :: MySQL 5.7 參考手冊 :: 6.2.1 提供的權限]</ref><ref>[https://stackoverflow.com/questions/6091427/mysql-into-outfile-access-denied-but-my-user-has-all-access-and-the-fold MYSQL into outfile "拒絕訪問" - 但我的使用者有 "全部" 訪問權限.. 且文件夾是 CHMOD 777 - Stack Overflow]</ref>。 相關問題:"錯誤!: SQLSTATE[HY000]: 一般錯誤:1290 MySQL 伺服器正在使用 --secure-file-priv 選項運行,所以它不能執行這個聲明"<ref>[https://stackoverflow.com/questions/32737478/how-should-i-tackle-secure-file-priv-in-mysql 資料庫 - 如何處理 MySQL 中的 --secure-file-priv? - Stack Overflow]</ref> == SQL 查詢語法錯誤 == === 捕獲異常:SQLSTATE[HY093]:無效的參數編號:參數未定義 === 解決方案 * 問號的數量與查詢值的數量不一致 <ref>[https://stackoverflow.com/questions/10966251/sqlstatehy093-invalid-parameter-number-parameter-was-not-defined php Invalid parameter number: parameter was not defined - Stack Overflow]</ref> * 查詢值的數組不應該是關聯數組。使用順序數組! === 錯誤!:SQLSTATE[HY000]:一般錯誤 === 訊息:錯誤!:SQLSTATE[HY000]:一般錯誤 狀況:當我使用 [http://php.net/manual/en/book.pdo.php PHP: PDO] 解決方案: * "您不應該在 update 或 insert 查詢中使用 {{kbd | key=<nowiki>$result = $stmt->fetchAll();</nowiki>}}" <ref>[https://stackoverflow.com/questions/12979510/pdo-error-sqlstatehy000-general-error-when-updating-database php - PDO error: " SQLSTATE[HY000]: General error " When updating database - Stack Overflow]</ref>。 * 您不應該在查詢 {{kbd | key=<nowiki>INTO OUTFILE ...</nowiki>}} 中使用 {{kbd | key=<nowiki>$result = $stmt->fetchAll();</nowiki>}} <ref>[http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/ Save MySQL query results into a text or CSV file]</ref><ref>[https://stackoverflow.com/questions/13369164/cant-create-write-to-file-errcode-22 mysql - Can't create/write to file (Errcode: 22) - Stack Overflow]</ref>。 === 錯誤:ASCII '\0' 出現在語句中,但這是不允許的,除非啟用了 --binary-mode 選項並且 mysql 以非互動模式運行 === 訊息:{{kbd | key=<nowiki>錯誤:ASCII '\0' 出現在語句中,但這是不允許的,除非啟用了 --binary-mode 選項並且 mysql 以非互動模式運行。如果期望 ASCII '\0',請將 --binary-mode 設為 1。查詢:''。</nowiki>}} 狀況:當我導入 sql 文件時遇到上述錯誤訊息。 解決方案:解壓縮文件然後再次導入文件<ref>[https://stackoverflow.com/questions/17158367/enable-binary-mode-while-restoring-a-database-from-an-sql-dump mysql - Enable binary mode while restoring a Database from an SQL dump - Stack Overflow]</ref>。sql 文件是壓縮文件。您可以使用 [https://en.wikipedia.org/wiki/File_(command) file (command)] 來識別文件的類型。 <pre> $ file compressed.sql compressed.sql:gzip 壓縮數據 $ file plain_text.sql plain_text.sql:UTF-8 Unicode 文本,帶有非常長的行 </pre> === 錯誤 1055: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column === 訊息 <pre> 查詢發生錯誤 (1055): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.posts.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by </pre> 遇到錯誤的查詢 <pre> -- 建立範例資料表 CREATE TABLE posts ( id INT, post_id VARCHAR(10), author VARCHAR(50), content TEXT, likes INT, post_time DATETIME ); -- 插入範例資料 INSERT INTO posts VALUES (1, 'A123', 'Alice', '第一篇文章', 10, '2024-01-01'), (2, 'A123', 'Bob', '推推', 5, '2024-01-02'), (3, 'A123', 'Bob', '讚讚', 3, '2024-01-03'); -- 這會報錯 SELECT id, -- 問題: 沒有在 GROUP BY 中 post_id, author, GROUP_CONCAT(content SEPARATOR "\n") AS content, -- 問題: 沒有在 GROUP BY 中 likes -- 問題: 沒有在 GROUP BY 中 FROM posts GROUP BY post_id, author; </pre> 解決方案:修正後的查詢 (1) SELECT 中的每個欄位要麼放在 GROUP BY 中、或 (2) 使用彙總函數 (如 MAX, MIN, SUM, COUNT, GROUP_CONCAT) <pre> -- 方法一:取消 `sql_mode=only_full_group_by`: 有兩種方法可以取消 `sql_mode=only_full_group_by`: 1. 暫時性修改 (僅對當前會話有效) ```sql SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); ``` 2. 永久性修改 (修改 MySQL 設定檔) - 找到 MySQL 設定檔 (通常是 `my.cnf` 或 `my.ini`) - 在 `[mysqld]` 區段加入或修改: ```ini [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION ``` 注意事項: 1. 修改設定檔後需要重啟 MySQL 服務才會生效 2. 不建議取消這個設定,因為: - 可能導致查詢結果不可預測 - 違反 SQL 標準 - 可能在未來版本中產生相容性問題 建議的做法是修正 SQL 查詢而不是更改 SQL mode。 -- 方法二: 把所有欄位加入 GROUP BY SELECT id, post_id, author, content, likes FROM posts GROUP BY post_id, author, id, content, likes; -- 方法三: 對非 GROUP BY 的欄位使用彙總函數 SELECT MAX(id) as id, post_id, author, GROUP_CONCAT(content) as contents, SUM(likes) as total_likes FROM posts GROUP BY post_id, author; </pre> === 錯誤 1235: 這個版本的 MySQL 尚未支持 'LIMIT & IN/ALL/ANY/SOME 子查詢' === 訊息:錯誤 1235 (42000):這個版本的 MySQL 尚未支持 'LIMIT & IN/ALL/ANY/SOME 子查詢'。 解決方案:將子查詢的語法更改為 {{kbd | key =column_name BETWEEN start_number to end_number}} 進一步閱讀: * [https://dev.mysql.com/doc/mysql-reslimits-excerpt/5.6/en/subquery-restrictions.html MySQL :: MySQL 限制和局限 :: 4 子查詢的限制] === 錯誤 1267: 字元集混合不合法 (utf8mb4_general_ci,COERCIBLE) 與 (latin1_swedish_ci,IMPLICIT) 用於 'concat' 操作 === 錯誤情況:嘗試合併不同類型的數據,例如 CONCAT(string, int) 解決方案:{{kbd | key =<nowiki>SELECT CONCAT(`string_column`, CONVERT(`int_column`, CHAR))</nowiki>}} 或 {{kbd | key =<nowiki>SELECT CONCAT(`string_column`, CAST(`int_column` AS CHAR))</nowiki>}}<ref>[https://stackoverflow.com/questions/15368753/cast-int-to-varchar mysql - 將 int 轉換為 varchar - Stack Overflow]</ref><ref>[http://blog.51cto.com/bian5399/1092772 mysql字元集問題:不合法的字元集混合 - 51CTO部落格]</ref> === 錯誤 1305 - 函數 MY_TABLE.MY_FUNCTION 不存在 === 訊息:MySQL 錯誤 1305 - 函數 MY_TABLE.MY_FUNCTION 不存在 解決方案:修正函數名稱中的打字錯誤 === 錯誤 1690 - BIGINT UNSIGNED 值超出範圍 === 訊息:MySQL 錯誤 #1690 (BIGINT UNSIGNED 值超出範圍) 解決方案 <ref>[https://dev.mysql.com/doc/refman/8.0/en/out-of-range-and-overflow.html MySQL :: MySQL 8.0 參考手冊 :: 11.2.6 超出範圍和溢出處理]</ref><ref>[https://stackoverflow.com/questions/34115917/mysql-error-1690-bigint-unsigned-value-is-out-of-range-for-unix-timestamp MySQL 錯誤 #1690 (BIGINT UNSIGNED 值超出範圍) 用於 UNIX_TIMESTAMP() - Stack Overflow]</ref>: <pre> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'; </pre> === 錯誤 1366: 字串值不正確 === 訊息:SQLSTATE[HY000]: 一般錯誤:1366 字串值 '\xF0\x9F\x87\xAF\xF0\x9F...' 對於欄位 'XXX' 不正確 解決方案: * 檢查 PHP PDO 的字元集。並執行 {{kbd | key=set names utf8mb4}}<ref>[https://stackoverflow.com/questions/54947392/incorrect-string-value-when-trying-to-pass-emoji-to-the-db-encoded-with-utf8mb4 php - 嘗試將使用 utf8mb4 編碼的表情符號傳遞給資料庫時字串值不正確 - Stack Overflow]</ref> * 檢查表的配置 ** 字元集 (字元集、字元集): {{kbd | key=utf8mb4}} ** 排序規則 (定序、字元序): {{kbd | key=utf8mb4_unicode_ci}} === 錯誤!: SQLSTATE[42000]: 語法錯誤或存取違規 === 訊息:{{kbd | key=<nowiki>錯誤!: SQLSTATE[42000]: 語法錯誤或存取違規:1064 您在 SQL 語法中有錯誤;請檢查手冊,了解您的 MySQL 伺服器版本對應的正確語法以用於 ...</nowiki>}} 解決方案: * [[SQL syntax debug | SQL 語法除錯]] * [https://www.eversql.com/sql-syntax-check-validator/ SQL 語法檢查在線上,SQL 驗證器,即時 SQL 編譯器在線上 - EverSQL] {{exclaim}} 不支持 [https://www.php.net/manual/en/pdo.prepare.php PHP: PDO::prepare],其中查詢語法包含問號。 == 連接和網路錯誤 == === MySQL 伺服器已斷開 (has gone away) === 步驟 * 在 MySQL 設定檔啟用 {{kbd | key = log_error}} 選項,例如 {{kbd | key = <nowiki>log_error="file_name_of_error_log"</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/8.0/en/error-log.html MySQL :: MySQL 8.0 Reference Manual :: 5.4.2 The Error Log]</ref>。 * 範例錯誤日誌位於 {{kbd | key = <nowiki>file_name_of_error_log</nowiki>}} 如下: <pre> 2019-05-23T08:52:19.989876Z 99980 [Note] 中斷連接 99980 到資料庫:'DB_NAME' 用戶:'DB_USER' 主機:'localhost' (收到的封包大於 'max_allowed_packet' 位元組) </pre> * 如果 MySQL 用戶具有 {{kbd | key = <nowiki>SUPER</nowiki>}} 權限<ref>[https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html MySQL :: MySQL 8.0 Reference Manual :: 6.2.2 Privileges Provided by MySQL]</ref>,則增加 {{kbd | key = <nowiki>max_allowed_packet</nowiki>}} 的值<ref>[https://stackoverflow.com/questions/5688403/how-to-check-and-set-max-allowed-packet-mysql-variable php - how to check and set max_allowed_packet mysql variable - Stack Overflow]</ref>。 === 錯誤:SQLSTATE[HY000] [2002] 沒有這樣的文件或目錄 === 錯誤訊息:SQLSTATE[HY000] [2002] 沒有這樣的文件或目錄 解決方案: * 將資料庫主機從 {{kbd | key=localhost}} 修改為 {{kbd | key=127.0.0.1}} === 錯誤 2002: 無法連接: SQLSTATE[HY000] [2002] === Windows Cygwin 終端機狀況: <pre> $ mysql -u root -p 輸入密碼: 錯誤 2002 (HY000): 無法通過 '/var/run/mysql.sock' 連接到本地 MySQL 伺服器 (2) $ mysql -h localhost -u root -p 輸入密碼: 錯誤 2002 (HY000): 無法通過 '/var/run/mysql.sock' 連接到本地 MySQL 伺服器 (2) </pre> 解決方案: * 將 {{kbd | key=<nowiki>-h localhost</nowiki>}} 更改為 {{kbd | key=<nowiki>-h 127.0.0.1</nowiki>}} <pre> $ mysql -h 127.0.0.1 -u root -p </pre> * 如果仍然不行,重啟伺服器並重新啟動 MySQL 服務。 === 錯誤 2002: SQLSTATE[HY000] [2002] 通常只允許每個通訊端位址 (協議/網路位址/埠) 的一次使用 === 訊息:(1) [2002] 通常只允許每個通訊端位址 (協議/網路位址/埠) 的一次使用 (2) "SQLSTATE[HY000] [2002] 一次只能用一個通訊端位址 (通訊協定/網路位址/連接埠)。" 用中文表示 解決方案:[https://stackoverflow.com/questions/10317974/mysql-php-error2002-only-one-usage-of-each-socket-address-protocol-network-a MySQL/PHP 錯誤:(2002) 通常只允許每個通訊端位址 (協議/網路位址/埠) 的一次使用 - Stack Overflow] === 錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器 === '''錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器''' 解決方案: * 檢查 IP 是否有效 '''錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器 (111 "連接被拒絕")''' 解決方案: * 檢查 MySQL 服務是否在運行<ref>[https://www.cyberciti.biz/faq/how-to-find-out-if-mysql-is-running-on-linux/ 如何找出 MySQL 是否在 Linux 上運行]</ref>。如果沒有,啟動 MySQL 服務。 * 檢查防火牆規則 '''錯誤 2003 (HY000): 無法連接到 'IP' 上的 MySQL 伺服器 (116 "連接超時")''' 解決方案: * 檢查 MySQL 的配置 ** 註釋掉 [https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_bind-address bind-address] = 127.0.0.1 或設置為 * ** 註釋掉 [https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-networking skip-networking] * 檢查 MySQL 資料庫用戶的權限。 * 在 (1) 個人電腦 (2) MySQL 服務所在的伺服器 (3) ISP/VM 供應商處檢查防火牆規則。更多資訊請參考 [https://devops.profitbricks.com/tutorials/install-mysql-on-centos-7/#firewall-rules 在 CentOS 7 上安裝 MySQL | ProfitBricks DevOps Central] ** 檢查您的 IP 地址是否包含在允許的 IP 地址列表中的防火牆規則。 ** 透過使用 [https://whatismyipaddress.com/ 我的 IP 地址是什麼?] 服務檢查您的 IP 地址是否有更改。 * (可選) 監控防火牆活動。更多資訊請參考 [https://www.howtogeek.com/220204/how-to-track-firewall-activity-with-the-windows-firewall-log/ 如何使用 Windows 防火牆日誌追蹤防火牆活動] 在 {{Win}} 參考資料: * [https://support.rackspace.com/how-to/mysql-connect-to-your-database-remotely/ 遠程連接到 MySQL 資料庫] * [http://wiki.navicat.com/wiki/index.php/Error_2003 錯誤 2003 - Navicat Wiki] * [http://faq.webyog.com/content/23/15/en/error-no-2003-can_t-connect.html SQLyog MySQL 管理員常見問答 - 錯誤號 2003: 無法連接...] === 錯誤 2013: 在查詢過程中與 MySQL 伺服器失去連接 === 訊息:錯誤代碼:2013。在查詢過程中與 MySQL 伺服器失去連接 情況:在執行包含超過 1,000,000 行的下列查詢後,我遇到了 '錯誤代碼:2013。在查詢過程中與 MySQL 伺服器失去連接' 的錯誤訊息。 <pre> INSERT IGNORE INTO `target`.`table` SELECT * FROM `source`.`table`; </pre> 解決方案: * 在 [https://www.mysql.com/products/workbench/ MySQL Workbench] 上增加 (1) '''資料庫連接保持活躍間隔(秒)''' 和 (2) '''資料庫連接讀取超時(秒)''' 的設定 <ref>[http://stackoverflow.com/questions/16877574/how-can-i-execute-sql-queries-that-take-longer-99-999-seconds-on-mysql-workbench 如何在 MySQL Workbench 上執行超過 99,999 秒的 SQL 查詢 - Stack Overflow]</ref><ref>[http://stackoverflow.com/questions/10563619/error-code-2013-lost-connection-to-mysql-server-during-query 錯誤代碼:2013。在查詢過程中與 MySQL 伺服器失去連接 - Stack Overflow]</ref>。修改設定後請重新啟動 MySQL Workbench。例如,預設的 '''資料庫連接讀取超時(秒)''' 設定為 30 秒,你可以增加到 6000 秒(100 分鐘)。 * 減少行數以縮短執行時間 (1) 使用 {{kbd | key=LIMIT}} 子句 (2) 或分割查詢大小,例如 {{kbd | key=<nowiki>MOD(column, 2) = 0</nowiki>}} 和 {{kbd | key=<nowiki>MOD(column, 2) > 0</nowiki>}},如果欄位是數字的話。 <pre> INSERT IGNORE INTO `target`.`table` SELECT * FROM `source`.`table` LIMIT 0, 10000; </pre> === 從 MySQL 資料轉移至 MSSQL === 情況: 需要將 MySQL 資料庫中的資料同步或遷移至 Microsoft SQL Server。 解決方案: * (手動方式) 匯出 MySQL 資料為 MSSQL 相容格式: {{kbd | key=<nowiki>mysqldump --compatible=mssql [database_name]</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/8.4/en/mysqldump.html#option_mysqldump_compatible MySQL :: MySQL 8.4 Reference Manual :: 6.5.4 mysqldump — A Database Backup Program]</ref> * (自動方式) 使用 [https://learn.microsoft.com/en-us/sql/ssma/sql-server-migration-assistant?view=sql-server-ver17 Microsoft SQL Server Migration Assistant]、''$'' [https://www.webyog.com/product/sqlyog SQLyog] 工具 (適用於 {{Win}})。設定特定查詢來控制要從 MySQL 轉移至 Microsoft SQL Server 的資料。 常見挑戰: * 大型資料集的連線逾時問題: 參考 2013 錯誤的故障排除方法,例如延長逾時參數或實施批次處理。 * 資料類型不相容: 在遷移前驗證兩系統間的類型對應,以防止資料損壞或遺失。 == 資源和環境錯誤 == === 無法存取 MySQL 日誌 === 版本:XAMPP 5.6.15-1,運行於{{Mac}} 原因: * 錯誤日誌只能由名為 {{kbd | key=mysql}} 的用戶訪問<ref>打開位於以下位置的 MySQL 設定檔案:/Applications/XAMPP/xamppfiles/etc/my.cnf <pre> # MySQL 伺服器 [mysqld] user = mysql </pre></ref> 解決方案 <ref>[http://computerplumber.com/2009/01/using-the-chmod-command-effectively/ 有效使用 CHMOD 命令 @ Computer Plumber]</ref>: <pre> 找到 MySQL 日誌的路徑 $ ls /Applications/XAMPP/xamppfiles/var/mysql/*.local.err 找出 MySQL 日誌的檔案名稱,例如:XXXMacBook-Pro.local.err 設置日誌的權限 $ sudo chmod 774 /Applications/XAMPP/xamppfiles/var/mysql/XXXMacBook-Pro.local.err </pre> === 錯誤代碼: 13 拒絕存取 === 當我嘗試啟動服務,執行 {{kbd | key=<nowiki>mysqld.exe --datadir=..\data --console</nowiki>}} 後出現此訊息。(MySQL版本:5.5.5-10.0.12-MariaDB 在 {{Win}}) <pre> > mysqld.exe --datadir=..\data --console 180430 10:33:38 [錯誤] mysqld.exe: 找不到檔案 'C:\MariaDB_10.0\bin\..\data\aria_log_control' (錯誤代碼: 13 "拒絕存取") 180430 10:33:38 [錯誤] mysqld.exe: 嘗試使用 aria 控制檔案 'C:\MariaDB_10.0\bin\..\data\aria_log_control' 時出錯 '無法打開檔案' 180430 10:33:38 [錯誤] 插件 'Aria' 初始化函數返回錯誤。 180430 10:33:38 [錯誤] 插件 'Aria' 註冊為儲存引擎失敗。 180430 10:33:38 [注意] InnoDB: 使用互斥鎖來計數緩衝池頁面 180430 10:33:38 [注意] InnoDB: InnoDB 記憶體堆疊已停用 180430 10:33:38 [注意] InnoDB: 互斥鎖和 rw_locks 使用 Windows 交錯函數 180430 10:33:38 [注意] InnoDB: 壓縮表使用 zlib 1.2.3 180430 10:33:38 [注意] InnoDB: 未使用 CPU crc32 指令 180430 10:33:38 [注意] InnoDB: 初始化緩衝池,大小 = 4.0G 180430 10:33:38 [注意] InnoDB: 完成緩衝池初始化 180430 10:33:38 [錯誤] InnoDB: 無法以讀寫模式打開 .\ibdata1 180430 10:33:38 [錯誤] InnoDB: 系統表空間必須可寫! 180430 10:33:38 [錯誤] 插件 'InnoDB' 初始化函數返回錯誤。 180430 10:33:38 [錯誤] 插件 'InnoDB' 註冊為儲存引擎失敗。 180430 10:33:38 [注意] 插件 'FEEDBACK' 已停用。 180430 10:33:38 [錯誤] 未知/不支持的儲存引擎: innodb 180430 10:33:38 [錯誤] 終止 180430 10:33:38 [注意] mysqld.exe: 關機完成 </pre> 解決方案: 以管理員特權開啟命令行。(如何操作: [https://www.howtogeek.com/194041/how-to-open-the-command-prompt-as-administrator-in-windows-8.1/ 如何在 Windows 8 或 10 中以管理員身份開啟命令提示符]) === 錯誤!:SQLSTATE[HY000]:一般錯誤:3 寫入檔案 'xxx\Temp\xxx.tmp' 時出錯(錯誤代碼:28 - 設備上沒有剩餘空間) === 錯誤訊息範例:錯誤!:SQLSTATE[HY000]:一般錯誤:3 寫入檔案 'C:\Windows\SERVIC~2\NETWOR~1\AppData\Local\Temp\MY2713.tmp' 時出錯(錯誤代碼:28 - 設備上沒有剩餘空間) 條件:檢查 mysql {{kbd | key=tmpdir}} 文件夾的磁碟可用空間 解決方案:增加 mysql {{kbd | key=tmpdir}} 文件夾的可用空間。或者使用另一個硬碟更改 mysql {{kbd | key=tmpdir}} 文件夾,該驅動器應具有更多的可用空間<ref>[https://stackoverflow.com/questions/11990887/changing-the-tmp-folder-of-mysql 更改 mysql 的 tmp 文件夾 - Stack Overflow]</ref>。 * 檢查當前的 mysql {{kbd | key=tmpdir}} 文件夾。查詢語法 {{kbd | key=<nowiki>SHOW VARIABLES LIKE 'tmpdir';</nowiki>}}。 ** 在 {{Win}} 上,預設的臨時文件夾<ref>[https://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/where-is-the-temporary-folder 臨時文件夾在哪裡?- Microsoft Community]</ref> 是 {{kbd | key=<nowiki>%TMP%</nowiki>}} = {{kbd | key=<nowiki>%USERPROFILE%\AppData\Local\Temp</nowiki>}}。 ** 在 {{Linux}} 上,預設的臨時文件夾可能是 {{kbd | key=<nowiki>/tmp</nowiki>}} * 編輯 [https://dev.mysql.com/doc/refman/5.7/en/option-files.html mysql 配置文件] <pre> [mysqld] tmpdir=X:/temp </pre> * 重啟 MySQL 服務 驗證 * 查詢語法 {{kbd | key=<nowiki>SHOW VARIABLES LIKE 'tmpdir';</nowiki>}} 來驗證 mysql 配置文件的修改。 === mysqldump: 寫入時遇到 errno 32 錯誤 === 錯誤情況 <pre> $ mysqldump -h localhost -u root -p --force --single-transaction --default-character-set=utf8 --quick mytable | pv | gzip -c > mytable.sql.gz </pre> 遇到錯誤訊息: <pre> -bash: pv: 命令找不到 ... mysqldump: 寫入時遇到 errno 32 錯誤 </pre> 根本原因 * 未安裝 pv * 輸入指令檢查 pv 是否安裝 {{kbd | key=which pv}} * 輸入指令安裝 pv:{{kbd | key=sudo yum -y install pv}} <ref>[https://installati.one/centos/7/pv/ 如何在 CentOS 7 上安裝 pv | Installati.one]</ref> 參考資料 * [https://mysqldump.guru/mysqldump-got-errno-32-on-write.html mysqldump: 寫入時遇到 errno 32 錯誤 | mysqldump.guru] === 錯誤 1205: 鎖定等待超時,嘗試重新啟動事務 === 解決方案:<ref>[https://stackoverflow.com/questions/5836623/getting-lock-wait-timeout-exceeded-try-restarting-transaction-even-though-im mysql - 獲得 "鎖定等待超時,嘗試重新啟動事務" 即使我沒有使用事務 - Stack Overflow]</ref> # {{kbd | key=<nowiki>SHOW OPEN TABLES WHERE in_use > 0;</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.html MySQL :: MySQL 5.7 參考手冊 :: 13.7.5.24 SHOW OPEN TABLES 語法]</ref> # {{kbd | key=<nowiki>SHOW [FULL] PROCESSLIST;</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html MySQL :: MySQL 5.7 參考手冊 :: 13.7.5.29 SHOW PROCESSLIST 語法]</ref> # {{kbd | key=<nowiki>KILL <process id>;</nowiki>}}<ref>[https://dev.mysql.com/doc/refman/5.7/en/kill.html MySQL :: MySQL 5.7 參考手冊 :: 13.7.6.4 KILL 語法]</ref> 相關文章 * [https://errerrors.blogspot.com/2022/10/how-to-fix-lock-wait-timeout-exceeded-try-restarting-transaction-on-mysql.html 解決 MySQL 錯誤 1205: 鎖定等待超時,嘗試重新啟動事務] === 錯誤 1206: 鎖的總數量超過鎖表的大小 === 訊息:錯誤代碼:1206。鎖的總數量超過鎖表的大小 當前狀態<ref>[https://dev.mysql.com/doc/refman/8.0/en/show-variables.html MySQL :: MySQL 8.0 參考手冊 :: 13.7.6.39 SHOW VARIABLES 語法]</ref>: * Keywin {{kbd | key = <nowiki>SHOW VARIABLES LIKE 'innodb_buffer_pool_size';</nowiki>}}。如果返回 {{kbd | key=8388608}},意味著 {{kbd | key=8388608}} 位元組 ≅ 8MB。 解決方案: * 增加 {{kbd | key = innodb_buffer_pool_size}} 例如 {{kbd | key =<nowiki>SET GLOBAL innodb_buffer_pool_size=402653184;</nowiki>}}(402653184 位元組 ~ 400MB。預設值是 8MB。) * 減少查詢數據的大小 進一步閱讀: * [http://stackoverflow.com/questions/5696857/how-to-change-value-for-innodb-buffer-pool-size-in-mysql-on-mac-os innodb - 如何在 Mac OS 上改變 MySQL 的 innodb_buffer_pool_size 的值? - Stack Overflow]。 * [https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html MySQL :: MySQL 5.7 參考手冊 :: 14.6.3.2 配置 InnoDB 緩衝池大小] === PHP 嚴重錯誤:在使用 adminer 導入 SQL.GZ 文件時,允許的記憶體大小耗盡 === 解決方案:使用基本的 mysqldump 命令來生成備份文件。然後使用 mysql 命令導入備份。 === 資料庫所在硬碟空間不足的狀況 === [http://errerrors.blogspot.com/2016/07/mysql.html Err: 解決 MySQL 資料庫所在硬碟空間不足的狀況] == 其他工具特定錯誤 == === Navicat 錯誤:[Exp] OLE 錯誤 800A03EC === 錯誤訊息: <pre> [Msg] [Exp] 導出到 - test.xlsx [Err] [Row1048576] [Exp] OLE 錯誤 800A03EC [Err] [Row1048577] [Exp] OLE 錯誤 800A03EC [Err] [Row1048578] [Exp] OLE 錯誤 800A03EC [Err] [Row1048579] [Exp] OLE 錯誤 800A03EC </pre> 原因: * 結果的行數超過了 [[Microsoft Excel]] 工作表大小的限制:1,048,576 行 解決方案: * 限制 MySQL 查詢的行數 === Navicat error: Field doesn't have a default value === 錯誤: <pre> [ERR] 1364 - Field 'source' doesn't have a default value </pre> 解決方案: * 從 Excel 匯入到資料庫時,source 欄位是空值或者沒有指定,需要指定 source 欄位值。或者修改欄位定義,允許欄位值可以 NULL。 === Navicat 錯誤: 導入數據筆數不一致 === 錯誤: 使用 Navicat 將 Excel 文件導入 MySQL 資料庫時,出現總記錄筆數不一致的問題。解決方案:刪除空白行並檢查任何重複的主鍵數據。 解決方案: * [https://errerrors.blogspot.com/2023/11/blog-post.html 解決 NaviCat 匯入 Excel 檔案到資料庫,出現資料總筆數不一致的問題] (written in Mandarin) === 如何解決 “zsh: operation not permitted: xxx.sql” === 錯誤情況 <pre> /applications/MAMP/library/bin/mysql -u [USERNAME] -p [DATABASE_NAME] < [PATH_TO_SQL_FILE] zsh: operation not permitted: PATH_TO_SQL_FILE.sql </pre> 解決方案:檢查安全與隱私設定:macOS 可能因安全設定而阻止終端機執行某些操作。你可以嘗試允許終端機完整磁碟存取: * 開啟系統偏好設定。 * 轉到安全與隱私。 * 選擇隱私權標籤。 * 捲動至完整磁碟存取。 * 點擊鎖定圖示以進行更改(可能需要你的管理員密碼)。 * 尋找終端機應用程式或 iTerm2 或你正在使用的任何終端機,勾選允許完整磁碟存取的方框。 * 重啟你的終端機。 == 延伸閱讀 == * 如果找不到想要的問題答案,可以前往stackoverflow 尋找 [https://stackoverflow.com/questions/tagged/mysql Unanswered 'mysql' Questions - Stack Overflow] == References == <references/> {{Template: Data factory flow in Mandarin}} [[Category: MySQL]] [[Category: Database]] [[Category: Data Science]] [[Category: Revised with LLMs]]
Summary:
Please note that all contributions to LemonWiki共筆 are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
LemonWiki:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Data factory flow in Mandarin
(
edit
)
Template:Exclaim
(
edit
)
Template:Kbd
(
edit
)
Template:LanguageSwitcher
(
edit
)
Template:Linux
(
edit
)
Template:Mac
(
edit
)
Template:Win
(
edit
)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Main page
Current events
Recent changes
Random page
Help
Categories
Tools
What links here
Related changes
Special pages
Page information