Broken URL in Notification Containing Plugins/Servlet/Undefined
症状
URLs in the Notification box take you to a "page not found" page but the URLs work if you remove plugins/servlet/undefined for example:
Wrong URL: http://company.com/confluence/plugins/servlet/undefined/display/SPACE/page
Correct URL: http://company.com/confluence/display/SPACE/page
The <Confluence Home>/logs/atlassian-confluence.log will contain a message similar to the following:
Caused by: java.sql.SQLException: Incorrect string value: '\xE7\xB2\x89\xE4\xB8\x9D...' for column 'BODY' at row 1
診断
Run the following query to check the database collation. If latin1 is returned, the collation will need to be changed.
SELECT TABLE_SCHEMA,
TABLE_NAME,
CCSA.CHARACTER_SET_NAME AS DEFAULT_CHAR_SET,
COLUMN_NAME,
COLUMN_TYPE,
C.CHARACTER_SET_NAME, ENGINE
FROM information_schema.TABLES AS T
JOIN information_schema.COLUMNS AS C USING (TABLE_SCHEMA, TABLE_NAME)
JOIN information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS CCSA
ON (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
WHERE TABLE_SCHEMA=SCHEMA()
AND C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'mediumtext', 'longtext')
ORDER BY TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME;
原因
Latin1 collation does not support some special characters like emoji.
ソリューション
Use native database tools to convert the database to utf8_bin collation.