我正在尝试制作一个多语言的mySQL数据库。 我正在考虑使用用户定义的函数来确定要读取的表中的哪一列 - 不同的列将存储不同的翻译 - 但我担心查询性能。
例如,如果我想返回城市列表和国家/地区的名称 - 后者以多种语言返回。以下方法将在什么时候影响性能? - 因为我可能会在2-5,000行的桌子上做同等的事情。
国家/地区表格结构:
SELECT `CountryID`, `Name_English`, `Name_French`, `Name_Spanish` FROM `Country` WHERE `CountryID` = fCountryID;
城市表结构:
SELECT
`City`.`CityName` 'City'
,getCountry(1, `City`.`CountryID`) 'Country'
FROM `City`;
示例函数调用:
SELECT `City`.`CityName` 'City' ,getCountry(1, `City`.`CountryID`) 'Country' FROM `City`;
全功能:
分隔符$$ CREATE DEFINER =
root
@localhost
功能getCountry
(fLanguageID
INT,fCountryID
SMALLINT) RETURNS varchar(100)CHARSET utf8 COLLATE utf8_unicode_ci BEGIN
DECLARE returnCountry VARCHAR(100);
IF (fLanguageID = 1) -- English
THEN
SET returnCountry = (
SELECT `Name_English` FROM `Country`
WHERE `CountryID` = fCountryID
);
ELSEIF (fLanguageID = 2) -- French
THEN
SET returnCountry = (
SELECT `Name_French` FROM `Country`
WHERE `CountryID` = fCountryID
);
ELSEIF (fLanguageID = 3) -- Spanish
THEN
SET returnCountry = (
SELECT `Name_Spanish` FROM `Country`
WHERE `CountryID` = fCountryID
);
END IF;
RETURN returnCountry;
SELECT
`CountryID`,
`Name_English`,
`Name_French`,
`Name_Spanish`
FROM `Country`
WHERE `CountryID` = fCountryID;
SELECT
`City`.`CityName` 'City'
,getCountry(1, `City`.`CountryID`) 'Country'
FROM `City`;
END $$