Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: MySQL

在 MySQL 上查詢英文發音類似的文字

Posted on 2022 年 11 月 15 日2022 年 11 月 15 日 By 日落 在〈在 MySQL 上查詢英文發音類似的文字〉中尚無留言

MySQL 有個叫做 soundex() 的函式,這個函式會回傳字串發音的 fingerprint,藉由這個 fingerprint 來搜尋其他發音類似的字串。

先隨意挑幾個單字:

select soundex("depoart"), soundex("department")
+--------------------+-----------------------+
| soundex("depoart") | soundex("department") |
+--------------------+-----------------------+
| D163               | D16353                |
+--------------------+-----------------------+

depoart 和 department 在前半部有相同的發音,所以 soundex() 回傳的 prefix 是相同的。

如果換成一組完全不同的文字:

select soundex("space"), soundex("system")
+------------------+-------------------+
| soundex("space") | soundex("system") |
+------------------+-------------------+
| S120             | S350              |
+------------------+-------------------+

因為都是 s 開頭,所以回傳值都是 S,但後半部的值就不同了。

這個在查詢類似拼字錯誤上應該蠻有用的,像是:

select case 
    when  soundex("john") = soundex("jone")
    then 1 else 0
end
as familiar
+----------+
| familiar |
+----------+
| 1        |
+----------+
Tags:MySQL

Deadlock Wait Timeout Exceeded on MySQL

Posted on 2022 年 4 月 13 日2022 年 4 月 13 日 By 日落 在〈Deadlock Wait Timeout Exceeded on MySQL〉中尚無留言

遇到 MySQL 的「deadlock wait timeout exceeded」,可以參考「Lock wait timeout exceeded; try restarting transaction」的說明。

尚未找到造成此問題的 query,暫時的解決辦法是:

  • 暫時先將 innodb_lock_wait_timeout 的值調大 (注意:不是 wait_timeout 這個參數)
  • 記錄導致 transaction 花掉太多時間的 query
    • long_query_time = 10
    • log_queries_not_using_indexes 記錄沒有使用到 index 的 query (這類 query 可能導致 table scan 而花掉超多的時間)

在蒐集 log 的期間,可以先去看一下 table schema,看看是不是有哪一些 column 或 combined index 怪怪的,跑 EXPLAIN 確定一下 index 是不是真的有用到

Tags:MySQL

Ubuntu 上 LNMP 的 PPA

Posted on 2022 年 2 月 14 日2022 年 2 月 14 日 By 日落 在〈Ubuntu 上 LNMP 的 PPA〉中尚無留言

default packages 更新速度比較慢,所以後來都改用 3rd-party 的 PPA 來裝 LNMP 環境。

以 PHP 來說的話,主要會以 oerdnj 的 PPA 為主:https://launchpad.net/~ondrej/+archive/ubuntu/php

其他則是:

  • Nginx https://launchpad.net/~nginx/+archive/ubuntu/stable
  • Redis https://launchpad.net/~redislabs/+archive/ubuntu/redis

MySQL / Percona / MariaDB 更新、patch 速度沒那麼快的,則是直接使用預設的 packages 來安裝。

Tags:Linux, MySQL, Nginx, PHP, 網路架站

MySQL 透過 LOAD DATA 塞資料

Posted on 2021 年 8 月 16 日2021 年 8 月 16 日 By 日落 在〈MySQL 透過 LOAD DATA 塞資料〉中尚無留言

若有文字檔等大檔案,寫 parser 再建立 insert into 的語法來塞資料速度不算快。簡單格式的檔案 (如一行一筆資料或 comma 分隔等) 可以透過 LOAD DATA 來將資料塞進 table 中。

LOAD DATA 需要特殊權限,請先檢查 my.cnf 檔案中是否已允許該語法:

[mysql]

# enable LOAD FILE syntax
local-infile = 1

再來是檔案內容,這邊的範例是一行一筆資料:

alice
bob
cell
......

確定資料格式以後,建立一個暫時的 table 供匯入使用:

CREATE TABLE tmp (
  str varchar(50)
);

注意,匯入速度要快的話,臨時的 table 不要設定任何 trigger、primary key、index 等,不然會有大量的 disk I/O 拖慢速度。

最後就是下指令來將檔案中的內容匯入資料庫中:

LOAD DATA LOCAL INFILE '/path/to/file/simple-data.txt' into table tmp;

資料都匯入臨時的 table,就可以使用 INSERT INTO … SELECT 語法來將資料拉進正式環境了:

INSERT INTO words (`word`) 
  SELECT (`str`) FROM tmp
Tags:MySQL

安裝 MySQL ODBC driver

Posted on 2021 年 7 月 29 日2021 年 7 月 29 日 By 日落 在〈安裝 MySQL ODBC driver〉中尚無留言

ODBC 的原文是「Open Database Connectivity」,透過各家 DBMS 實作指定的 API / interface 來支援各種不同的資料庫系統、儲存格式。這邊將安裝 ODBC MySQL connector/ODBC 並建立 MySQL connection resource。

透過搜尋引擎可以找到很多 ODBC driver,這邊要裝的是 MySQL driver,所以會下載 Oracle 發佈的 MySQL ODBC driver。安裝過程全部使用預設值即可。

安裝完畢後,可以在開始功能表的「Windows 系統管理工具」中找到「ODBC 資料來源」,執行並準備連到 MySQL:

圖一:在開始功能表找到 ODBC 設定

要建立 MySQL resource 預先需要一些準備工作,讓 ODBC 可以透過指定的 MySQL user 連線:

  • 在 MySQL 建立新的 user。若只需相同的 privileges 時,也可以直接使用既有的 MySQL user。記得使用連線時,要特別注意 user host 的設定。
  • 為 user 開啟 database 權限,可以是單個或多個 database,也可以設定 read/write 權限。

More “安裝 MySQL ODBC driver” »

Tags:MySQL

文章分頁

上一頁 1 2 3 ... 6 下一頁

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.