![](/img/trans.png)
[英]store the country ID from country drop down box in mysql but it is storing as 0 in db
[英]MySQL insert country iso or country id from another table
我想在我的數據庫中插入每個訪問者的國家/地區。 Maxmind返回我可以存儲在VARCHAR(2)
的2個字母的國家ISO,它將使用2個字節,或者,我可以使用將使用1個字節的UNSIGNED TINYINT
,並且將是來自所有表的id那些國家。
然而我碰到了一個凹凸; 我需要MyISAM
引擎進行快速插入,但MyISAM不支持FOREIGN KEYS
,所以我想對於每次插入,我都必須在countries表中進行選擇以檢索國家ID。
我不知道什么是最好的選擇,我絕對需要使用MyISAM
因為會有很多插入,但我不想經常使用SELECTs
來檢索國家ID。
如果您只需要2個字母的ISO國家/地區代碼(而不是國家/地區名稱,語言或其他信息),那么我會說將其存儲為沒有外部表的CHAR(2)將比存儲它更少資源。因為SMALLINT(TINYINT不足以涵蓋所有國家/地區),所以查找其他表格。
注意:在這種情況下不需要VARCHAR(2),CHAR(2)會更有效。
您可以從國家/地區表創建關聯數組。 將國家/地區ID作為此陣列的鍵。 然后將其提供給您的觀點。 因此,在視圖中,您可以對國家/地區陣列進行查找並顯示相關國家/地區。 例如
<?php echo $country[$customer['country_id']]['country_name']; ?>
獲得FK支持與沒有FK支持之間的唯一區別是確保完整性。 如果您使用支持FK的引擎,它將不允許您設置國家而不具有該記錄的ID。
這就是說,國家的數量是半靜態的,我們只談了幾百個...你可能會把所有這些保留在內存中,並且ID是可用的。
或者,您可以在插入期間執行選擇,如:
INSERT INTO sometable (col1,col2,country_id) VALUES('val1','val2', (SELECT id FROM countries WHERE iso_code = ?))
?
將是您的ISO值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.