-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Stop escaping Unicode characters unnecessarily in relational JSON #32152
Comments
related: #30315 |
Here's the relevant docs page on encoding/escaping in System.Text.Json; we may want to specify JavaScriptEncoder.UnsafeRelaxedJsonEscaping. However, for people using non-Unicode encodings in the database, or wanting to interact with the JSON documents from other tools which may not support special chars, we should probably have some sort of mechanism for specifying the encoding/escaping policy; this basically boils down to allowing users to specify the JsonSerializerOptions (which has this one it). Maybe it makes sense to keep the current behavior as the default (as that's the S.T.Json default), and just tell people to specify UnsafeRelaxedJsonEscaping via JsonSerializerOptions if they want unescaped chars. |
related: #33443 We also escape all unicode chars in JSON property names, however when building a JSON path for query or update we don't escape those chars. This leads to us not fetching/updating the requested JSON fragments |
Note that we'd need to not escape - and deal with non-escaped JSON data - everywhere in our stack (SaveChanges, JSON path generation, shaper - see #33771. As in #33771 (review), we should consider doing this for 9.0 as well, since #33771 is a breaking change for people querying externally-inputted JSON data that isn't escaped. |
Note for the implementer: (as pointed out by @Charlieface here: #33443 (comment)) when we allow un-escaped JSON strings, we need to escape single and double quotes and also pre-pend N to the JSON path string. |
Design discussion:
|
Sorry to chime in here. Currently in EF Core 8, there is no way we can persist Unicode characters in non-escaped form for JSON columns? There is no easy workaround, correct? |
The JSON stored in a SQL Server column always has its Unicode characters escaped. For example, this code:
Results in the following JSON in the database:
However, there is nothing preventing the JSON being stored as:
EF reads the correct string back in both cases, but other tools may not be expecting escaped JSON for all Unicode characters.
Test code:
The text was updated successfully, but these errors were encountered: